我试图从一些日志文件解析荷兰日期,但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"这个词没有问题。我能做些什么来克服它?
看起来该文化没有使用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);
...
我使用不同的方法发现了与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