【问题标题】:DateTime.TryParseExact returning false for localized dateDateTime.TryParseExact 为本地化日期返回 false
【发布时间】:2015-05-21 18:12:25
【问题描述】:

我正在尝试从一些日志文件中解析荷兰语日期,但 C# DateTime.TryParseExact 总是返回 false:

DateTime.TryParseExact("mei 21, 2015 12:25:35:719 AM", "MMM dd, yyyy hh:mm:ss:fff tt", new CultureInfo("nl-BE"), DateTimeStyles.None, out date)

返回假;但是我看不出我的日期格式有什么问题?

但是这会返回 true:

DateTime.TryParseExact("May 21, 2015 12:25:35:719 AM", "MMM dd, yyyy hh:mm:ss:fff tt", new CultureInfo("en-US"), DateTimeStyles.None, out date) true    bool

所以这意味着“nl-BE”不知道“mei”这个词,而 en-US 对“May”没有问题。我能做些什么来克服这个问题?

【问题讨论】:

    标签: c# datetime


    【解决方案1】:

    看起来这种文化不使用 AM 指示符:

    var culture = new CultureInfo("nl-BE");
    Console.WriteLine("x{0}x", culture.DateTimeFormat.AMDesignator);
    

    打印xx,表明 AM 指示符为空。

    你可以修改这个:

    var culture = (CultureInfo) new CultureInfo("nl-BE");
    culture.DateTimeFormat.AMDesignator = "AM";
    culture.DateTimeFormat.PMDesignator = "PM";
    DateTime date;
    var result = DateTime.TryParseExact("mei 21, 2015 12:25:35:719 AM",
                           "MMM dd, yyyy hh:mm:ss:fff tt",
                           culture,
                           DateTimeStyles.None, out date);
    ...
    

    【讨论】:

    • 非常感谢,确实是这个问题。我已经在 Dutch CultureInfo 上手动设置了 AMDesignator,现在可以很好地解析日期。
    【解决方案2】:

    我使用不同的方法发现了与 Jon 相同的东西。它确实是往返的,但在任一方向都没有使用 AM/PM 指示符——tt 格式字段既不生成也不匹配任何内容。

    测试代码:

    DateTime date;
    string fmt = "MMM dd, yyyy hh:mm:ss:fff tt";
    Console.WriteLine(DateTime.TryParseExact("May 21, 2015 12:25:35:719 AM", fmt, new CultureInfo("en-US"), DateTimeStyles.None, out date));
    CultureInfo dutch = new CultureInfo("nl-BE");
    String s = date.ToString(fmt, dutch);
    Console.WriteLine(s);
    Console.WriteLine(DateTime.TryParseExact(s, fmt, dutch, DateTimeStyles.None, out date));
    

    输出:

    True
    mei 21, 2015 12:25:35:719 
    True
    

    事实上,tt 字段在该语言环境中被彻底破坏,因为它确实从 24 小时制更改为 12 小时制,但第一个和第二个之间没有任何区别半天。

    在线编译器:http://rextester.com/UYR26148

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多