簡體   English   中英

收到錯誤:在C#中,字符串未被識別為有效的DateTime

[英]Getting error : String was not recognized as a valid DateTime in c#

出現類似的錯誤:

mscorlib.dll中發生了'System.FormatException'類型的未處理異常。其他信息:無法將字符串識別為有效的DateTime。

我正在使用此代碼:

string datetime = DateTime.Parse(encrypt[1]);

要么

string datetime = Convert.ToDatetime(encrypt[1]);

加密是一個字符串數組

encrypt[1]not sure which format will come in string 我有一段時間來跟蹤dd/MM/yyyyMM/dd/yyyyMM-dd-yyyydd-MM-yyyy 我不確定它是從上面格式化的,還是其他格式來了。

也可以使用ParseExceptTryParseExcept 但沒有成功似乎返回相同的錯誤

請給我適當的解決方案。

AndreyAkinshin已經解釋了真正的問題。 如果他允許我將其添加為答案。

默認情況下, DateTime.ParseConvert.ToDatetime方法都使用CurrentCulture設置。

並且您的CurrentCulture 只能采用dd/MM/yyyyMM/dd/yyyy格式之一。 它不能同時使用兩種格式作為標准的日期和時間格式,因為當您獲得01/01/2014類的字符串時,它知道使用哪種格式。

DateTime方法無法解決您的問題。 即使您使用DateTime.TryParseExact重載 (將格式作為string[] ,它也會使用與數組中匹配的第一個成功格式來解析您的字符串。

tl; dr

必須知道數據的格式。

如果您不完全知道要輸入的內容,那么正確地獲取日期格式幾乎沒有任何改變

拿這個樣本:

01/02/2014

是1月2日還是2月1日?

如果您確實知道格式,則可以使用TryParseExact然后向下瀏覽列表,直到找到一個匹配項:

DateTime d;
if (DateTime.TryParseExact(encrypt[1], "dd/MM/yyyy", CultureInfo.InvariantCulture, out d))
{ }
else if (DateTime.TryParseExact(encrypt[1], "yyyy/MM/dd", CultureInfo.InvariantCulture, out d))
{ }

您無法以編程方式告訴您日期是dd / mm / yyyy還是mm / dd / yyyy,除非它們明顯無效,例如,如果您預計dd / mm / yyyy並且得到2014年12月14日,則該格式只能是mm / dd / yyyy。

但是,由於您正在從HTTP請求接收數據(問題用MVC標記),因此您可以找到用戶的區域性,並使用它來解析日期,例如

DateTime.Parse("13/12/2014", new CultureInfo("en-GB")); // Works fine.

DateTime.Parse("13/12/2014", Thread.CurrentThread.CurrentCulture)

有關更多信息,請參見http://msdn.microsoft.com/zh-cn/library/bb882561(v=vs.110).aspx

暫無
暫無

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

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