2013-04-11 61 views
0

我遇到了無法識別DateTime字符串的問題。使用我們的許可程序,您將生成一個與其關聯的到期DateTime的密鑰。但是,世界另一部分的一些客戶無法應用此密鑰,並且返回的錯誤是「字符串未被識別爲有效的日期時間」。問題與「無效的」DateTime字符串

我看了一下我發給他們的密鑰,解密之後,DateTime對我來說看起來很好。在我需要考慮的世界不同地區格式化日期時間時,是否存在差異? (現在我的想法是.NET將「弄明白」,我認爲現在可能不是這樣)如果是這樣,我將如何去格式化我們的DateTime,以便它可以在任何部分世界的?

編輯這裏是時間字符串:「2122年10月16日下午4時36分17秒」

+0

什麼是您的日期格式? – musefan 2013-04-11 14:40:29

+0

你的代碼是什麼樣的?表示日期的字符串是什麼樣的?密鑰是如何生成的? – 2013-04-11 14:40:57

+0

有些文化是dd/mm/yyyy http://msdn.microsoft.com/en-us/library/1k1skd40(v=VS.80).aspx – Paparazzi 2013-04-11 14:45:28

回答

2

我的猜測是,你的關鍵是這樣產生的:

string key = date.ToString(); 

這將給予不同的國家不同的結果。
請給予一個固定格式的唯一生成的密鑰:

string key = date.ToString("yyyyMMdd"); 

然後你可以解析它返回到所有國家的日期:

var date = DateTime.ParseExact(key, "yyyyMMdd", CultureInfo.InvariantCulture); 

進一步閱讀here
And here you can find all the date format you have ever dream of.

+0

是的,這是我將DateTime轉換爲字符串(頂部)的方式。我要去看看它是如何使用InvariantCulture工作的。我總是認爲DateTime.ToString()在不同國家是一致的,除格式化幫助外,從來沒有真正查看DateTime API。 – 2013-04-11 14:46:50

3

自發性我會嘗試使用的ToString()方法來應用自定義格式。

例子:

string date = DateTime.Now.ToString("yyyy-MM-dd"); // International standard 

您可以按照MSDN Custom Date and Time Format幫助格式化你需要的方式。

+0

同意,我的經驗是通過所有文化。 – Paparazzi 2013-04-11 14:51:33

+1

經過進一步研究,這是CultureInfo.InvariantCulture如何格式化字符串(以及實際時間似乎是UTC)。 – 2013-04-12 12:31:00

2

這可能是一個文化問題。 使用InvariantCulture確保您始終使用相同的格式

string datestring = DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantCulture) 

DateTime date = DateTime.Parse(datestring, System.Globalization.CultureInfo.InvariantCulture); 
+0

不錯,乾淨! – einord 2017-06-21 12:44:44