我正在将 DateTime 转换为 en-US 文化中的字符串。
dateTimeString = dateTime.ToString();
但是,如果我在 fr-FR 文化中启动我的应用程序并尝试使用以下语句进行解析
DateTime.Parse(dateTimeString, CultureInfo.CurrentCulture);
它抛出 FormatException。
我错过了什么?
我正在将 DateTime 转换为 en-US 文化中的字符串。
dateTimeString = dateTime.ToString();
但是,如果我在 fr-FR 文化中启动我的应用程序并尝试使用以下语句进行解析
DateTime.Parse(dateTimeString, CultureInfo.CurrentCulture);
它抛出 FormatException。
我错过了什么?
是的,这将是一个问题。
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
预期为 a。
编辑:日期/时间可能有点痛苦。对于可移植性(跨文化格式和时区),如果您需要序列化为字符串,我建议以ISO 8601
格式序列化。
正如jglouie所说,您无法解析不同文化中的日期时间字符串。
您将不得不使用“en-US”对其进行解析。
DateTime.Parse(dateTimeString, CultureInfo.CreateSpecificCulture("en-US"));
没有其他方法可以绕过它。
最好的解决方案可能是在将 a 转换DateTime
为 astring
并将string
back解析为 a 时使用不变的文化DateTime
。无论运行应用程序的计算机的设置如何,这都会为您提供一致的结果。