保存在en-US文化中的dateTimeString在fr-FR文化中解析时抛出Format Exception

时间:2012-08-26 20:43:37

标签: winforms c#-2.0 globalization

我正在将DateTime转换为en-US文化中的字符串。

dateTimeString = dateTime.ToString();

但是,如果我在fr-FR文化中启动我的应用程序并尝试使用以下语句进行解析

DateTime.Parse(dateTimeString,CultureInfo.CurrentCulture);

抛出FormatException。

我遗失了什么?

2 个答案:

答案 0 :(得分:2)

是的,那将是一个问题。

DateTime上的常规ToString()将为en-US生成这样的日期字符串:

"8/26/2012 8:54:16 PM"

对于fr-FR,它会生成此代码:

"26/08/2012 20:54:16"

因此,如果您尝试将第一个字符串(en-US)解析为fr-FR日期时间字符串,那么26将被视为无效月份,并且预计会有FormatException

编辑: 日期/时间可能会有点痛苦。对于可移植性(跨文化格式和时区),如果您需要序列化为字符串,我建议您使用ISO 8601格式进行序列化。

答案 1 :(得分:1)

jglouie所述,您无法解析不同文化中的日期时间字符串。

您将不得不使用“en-US”解析它。

DateTime.Parse(dateTimeString, CultureInfo.CreateSpecificCulture("en-US"));

除此之外别无他法。

最佳解决方案可能是在将DateTime转换为string时以及将string转换回DateTime时使用不变文化。无论运行应用程序的计算机的设置如何,这都将为您提供一致的结果。