2014-11-21 58 views
0

四處錯誤,如:四處錯誤:字符串未被在C#中識別爲有效的DateTime

型「System.FormatException」未處理的異常出現在mscorlib.dll其他信息:字符串未被識別爲有效的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/yyyy和有時MM/dd/yyyyMM-dd-yyyydd-MM-yyyy。我不確定格式可能來自上面或另一種格式。

也使用ParseExceptTryParseExcept。但沒有得到成功似乎返回相同的錯誤

請給我適當的解決方案。

+7

您應該知道用於解析的字符串格式。否則,你無法區分不同的日期。例如:字符串「01/02/2014」可以解析爲2014年2月1日或2014年1月2日。 – AndreyAkinshin 2014-11-21 12:55:12

+0

我給你我的想法看到:我已經制作了一個winform應用程序並使用datetime創建密鑰,然後我給了這個應用程序到客戶端和客戶端說不解密工作,那麼我發現它的日期時間合成問題。所以我們不知道哪個合作伙伴會被我的客戶使用。 – 2014-11-21 13:26:17

+0

你設置標籤asp.net mvc。當客戶從winform應用程序發佈數據時,他會將其發佈到控制器或api中?如果是這樣,您可以嘗試從請求中獲取文化信息。其他的機會,如果你可以改變winform應用程序的文化,那麼所有的客戶。 – 2014-11-22 13:10:31

回答

0

如果你不完全知道什麼是進來,你有幾乎沒有改變日期格式正確

拿這個例子:

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)) 
{ } 
0

你不能編程告訴日期是否DD/MM/YYYY或mm/dd/yyyy,除非它們明顯無效,例如如果您預計dd/mm/yyyy,並且您獲得12/14/2014,那麼該格式只能是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/en-us/library/bb882561(v=vs.110).aspx瞭解更多信息。

4

AndreyAkinshin已經explained真正的問題。我想添加這個作爲答案,如果他讓我..

DateTime.ParseConvert.ToDatetime方法默認使用您的CurrentCulture設置。

而且你CurrentCulture可以只有dd/MM/yyyyMM/dd/yyyy格式之一。它不能同時具有兩種格式作爲標準日期和時間格式,因爲不知道在獲得像01/01/2014這樣的字符串時會使用哪種格式。

沒有DateTime方法可以解決您的問題。即使您使用的DateTime.TryParseExact overload格式爲string[],它也會以您的數組中匹配的第一個成功格式分析字符串。

TL;博士

必須知道你的數據格式有。

+0

我給你我的想法看到:我已經使一個winform應用程序和使用創建密鑰使用日期時間,然後我已經將此應用程序給客戶端和客戶端說不解密工作,然後我發現它的日期時間合成問題。所以我們不知道哪個合作伙伴會被我的客戶使用。 – 2014-11-21 13:37:04

+0

在這種情況下,您需要調整Winforms應用程序中的代碼以強制使用不變的日期格式。例如,強制Winforms應用程序使用明確的ISO 8601日期格式:DateTime.Now.ToString(「yyyy-MM-dd」) – 2014-11-21 14:30:36

相關問題