DateTime.TryParseExact为本地化日期返回false

时间:2015-05-21 18:12:25

标签: c# datetime

我试图从一些日志文件中解析一个荷兰语日期,但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)

返回false;但我不知道我的日期格式有什么问题?

但是这会返回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”没有任何问题。我该怎么做才能克服这个问题?

2 个答案:

答案 0 :(得分:3)

看起来文化并没有使用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);
...

答案 1 :(得分: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