2013-04-11 62 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