簡體   English   中英

如何在沒有得到“字符串未被識別為有效的日期時間”的情況下轉換日期。 - 錯誤?

[英]How to convert dates without getting 'String was not recognized as a valid DateTime.'-error?

我正在嘗試使用以下代碼將日期轉換為例如 30/12/2000 到 2000-12-30:

System.Globalization.CultureInfo enUS = new System.Globalization.CultureInfo("en-US");
DateTime.ParseExact(row.Cells[6].ToString(), "yyyy-MM-dd", enUS);

但我收到了這個錯誤:

String was not recognized as a valid DateTime. 

有人可以幫助我嗎,在此先感謝您。

您可以使用DateTime.TryParse() function 並檢查結果是真還是假。
因此,您可以嘗試使用指定格式解析日期,如果不正確,請嘗試另一種格式,依此類推...

你得到這個的原因與異常所說的完全一樣,字符串格式不正確,原因很可能是進行比較的機器與 yyyy-MM-dd 的日期時間設置不同。

如果您從數據庫中檢索它並且返回值是日期時間(或者如果您知道 row.Cells[6] 是 DateTime 字段,則以下內容應該有效:

System.Globalization.CultureInfo enUS = new System.Globalization.CultureInfo("en-US");

if (row.Cells[6] != null)
    DateTime.ParseExact(((DateTime)row.Cells[6]).ToString("yyyy-MM-dd"), "yyyy-MM-dd", enUS);

但是,問題是您為什么要更改格式,將其顯示在表單上,如果是這樣,則可以按如下方式顯示:

if (row.Cells[6] != null)
    TextBox1.Text = ((DateTime)row.Cells[6]).ToString("yyyy-MM-dd");

編輯鑒於 row.Cells[6] 是一個字符串,您將始終必須知道字符串的格式是什么,如果您這樣做,那么它會很簡單:

隨着時間的推移:

DateTime ParsedDate = DateTime.ParseExact(row.Cells[6].ToString(), "dd-MM-yyyy h:mm", enUS);

刪除時間然后解析:

DateTime ParsedDate = DateTime.ParseExact(row.Cells[6].ToString().Substring(0,10), "dd/MM/yyyy", enUS);

然后到 output 它以您想要的格式簡單如下:

TextBox1.Text = ParsedDate.ToString("yyyy-MM-dd");

您指定的是 en-US CultureInfo object,但 30/12/2000 不是正確的美國日期格式

試試這個可能會解決您的問題

String oldScheduledDate = "16-05-2011";
 DateFormat oldFormatter = new SimpleDateFormat("dd/MM/yyyy");
 DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
 try
 {
    Date oldDate = (Date)oldFormatter .parse(oldScheduledDate);
 }
 Catch(Exception ex ) { /// process exception}
System.Globalization.CultureInfo enUS = new System.Globalization.CultureInfo("en-US");
try {
 DateTime.ParseExact(row.Cells[6].ToString(), "yyyy-MM-dd", enUS);
}
catch (FormatException) {
 ...your code instead of error...
}

我相信問題出在你的第二個參數上。 如果您將 30/12/200 作為輸入傳遞,它將失敗,因為第二個參數期望它用破折號分隔。

利用

  System.Globalization.CultureInfo.InvariantCulture

 DateTime.ParseExact(((DateTime)row.Cells[6]).ToString("yyyy-MM-dd"), "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture)

;

你忘記了小時/分鍾:

從數據庫中它是這樣的(轉換為字符串)“12/05/2011 0:00”

DateTime.ParseExact(theCellValue, "MM/dd/yyyy HH:mm", enUS).ToString("yyyy-MM-dd")

創建你想要的字符串,但它完全愚蠢。 您應該確保首先按照您的需要格式化日期時間。 (那么你永遠不必解析它)

如果您的源字符串在 dd/MM/yyyy 中,那么您不應該使用美國文化 (MM/dd/yyyy) 來解析字符串。

System.Globalization.CultureInfo enGB = new System.Globalization.CultureInfo("en-GB");
DateTime temp = DateTime.ParseExact(row.Cells[6].Text, "dd/MM/yyyy", enGB);

row.Cells[6] = temp.ToString("yyyy-MM-dd");

把它放在網格的 RowDataBound 事件中。

我通過使用修復它

Convert.ToDateTime(row.Cells[6].Text)

看看它有多簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM