【问题标题】:DateTime.ParseExact problem with Thai / Buddhist Era Time泰国/佛教时代时间的 DateTime.ParseExact 问题
【发布时间】:2011-07-29 04:04:03
【问题描述】:

客户端使用我们的应用程序从我们的服务器下载文件后,该应用程序对从服务器下来的日期字符串执行ParseExact,格式为:yyyy/mm/dd HH:mm:ss

经过一番困惑后,我在一些日志中注意到客户端系统上的日期是19/7/2554。事实证明这是泰国的有效时间,Windows 默认为佛教时代时间系统,即 2554 年。

我的解析是使用不变的文化完成的,我怀疑这可能是问题所在,但我认为文化是指您尝试解析的格式?

我收到的异常消息是:字符串未被识别为有效的DateTime,因为星期几不正确

【问题讨论】:

  • 您的格式似乎根本不包括星期几。你能举一个你试图解析的字符串和正在解析的代码的例子吗?
  • 您确实在指定格式列表吗?
  • 啊,我的坏人,我搞砸了。原来还有一段我什至不知道的代码正在运行。仅使用来自日志文件的异常消息进行调试非常困难。原来这是一个 DateTime.Parse 错误,而不是 parseexact。我能够通过将我的 PC 的区域更改为泰国来复制该问题,并准确查看它的死机。
  • 我相信不变文化不应该给你带来问题,这是我认为正确的解析方式,这样无论不同文化的具体格式如何,你的代码都能正常工作。如果 InvariantCulture 不适合您,我会很感激了解您的问题,因为我自己正在为我的项目使用 Invariant Culture。

标签: c# parsing datetime thai


【解决方案1】:

CultureInfo 还包含日历信息。如果 TryParseExact 方法可以访问正确的日历信息,那么它将能够正确解析日期。

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.calendar.aspx

如果您将 InvariantCulture CultureInfo 替换为 Thai CultureInfo,则将使用该文化的默认日历。

或者,您可以使用不需要 CultureInfo 的 TryParse 方法的重载。在这种情况下使用的文化将取决于用户在 Windows 中的区域设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多