[英]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.