我试图从一些日志文件中解析一个荷兰语日期,但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”没有任何问题。我该怎么做才能克服这个问题?
答案 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小时,但第一个之间没有任何区别当天下半场。