[英]converting a string to a DateTime format
我正在嘗試使用以下方法解析09/01/2015 00:00:00
格式為yyyy-MM-ddThh:mm:ssZ
:
DateTime.ParseExact("09/01/2015 00:00:00", "yyyy-MM-ddThh:mm:ssZ", (IFormatProvider)CultureInfo.InvariantCulture);
但我得到的String was not recognized as a valid DateTime
誰能告訴我為什么? 我相信09/01/2015 00:00:00
是一個有效的DateTime格式?
將指定的日期和時間字符串表示形式轉換為其DateTime等效項。 字符串表示形式的格式必須與指定的格式完全匹配,否則拋出異常。
在你的情況下,他們不是。
我假設您的09
部分是日期編號,您可以使用dd/MM/yyyy HH:mm:ss
格式。
var dt = DateTime.ParseExact("09/01/2015 00:00:00",
"dd/MM/yyyy HH:mm:ss",
CultureInfo.InvariantCulture);
由於CultureInfo
已經 實現了 IFormatProvider
,因此您無需顯式轉換它。
我不明白這一點。 所以這意味着我首先必須糾正我的字符串,其次我可以做一個ParseExact()。 我以為ParseExact可以處理給定的字符串......
ParseExact
不是一個可以解析你提供的任何格式化字符串的神奇方法。 只有當您的字符串和格式根據您使用的文化設置完全匹配時,它才能處理。
試試這段代碼:
var text = "09/01/2015 00:00:00";
var format = "dd/MM/yyyy HH:mm:ss";
var dt = DateTime.ParseExact(text, format, (IFormatProvider)CultureInfo.InvariantCulture);
您會注意到格式必須在結構上與您嘗試精確解析的文本匹配 - 因此該方法的ParseExact
名稱。
格式不匹配,您需要將09/01/2015
更改為2015-01-09
或將yyyy-MM-dd
部分更改為dd/MM/yyyy
。
ParseExact方法不是將任何日期格式轉換為另一種日期格式的終極方法,它只是使用提供的格式將給定字符串解析為日期時間。 因此,如果您的inout與此格式不匹配,則該方法將拋出該異常。
由於日期時間在內部只是一個數字,因此根本不需要將一種格式轉換為另一種格式,因此只要您知道輸入格式,就可以從中構建日期,這與您可能需要的任何格式無關。當您想要將該日期打印到輸出時。 在這種情況下,您將需要一個格式化程序。
正如大多數人所說,錯誤來自這樣一個事實,即字符串格式的日期與您所說的格式不符。您說09/01/2015 00:00:00的格式為“yyyy” -MM-ddThh:mm:ssZ“,它不是,因此錯誤。 要糾正這個問題,您需要更改字符串所在的格式,或者更有可能更改日期所在的格式。所以將“yyyy-MM-ddThh:mm:ssZ”更改為“dd / MM / yyyy HH:MM:SS”。
從長遠來看,你是如何到達那個日期的? 格式是否可能改變(輸入但用戶)? 如果是這樣,最好嘗試避免拋出錯誤並使用TryParseExact更好地處理它。 為了充分利用這一點,我通常會輸出一個可為空的DateTime,然后檢查它是否為null。 如果你不這樣做,那么如果解析失敗,它只會使輸出日期時間成為最小值。
這樣的事情應該有效:
public DateTime? StringToDate (string dateString, string dateFormat)
{
DateTime? dt;
DateTime.TryParseExact(dateString, dateFormat, null, System.Globalization.DateTimeStyles.None, out dt);
return dt;
}
然后你可以像這樣使用它:
DateTime? MyDateTime = StringToDate("09/01/2015 00:00:00", "dd/MM/yyyy HH:mm:ss");
if(MyDateTime != null)
{
//do something
}
另一種簡單的方法......
var dt = Convert.ToDateTime(Convert.ToDateTime("09/01/2015 00:00:00").ToString("yyyy-MM-ddThh:mm:ssZ"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.