DateTime.对于本地化日期,TryParseExact返回false

本文关键字:TryParseExact 返回 false 日期 本地化 DateTime | 更新日期: 2023-09-27 17:50:15

我试图从一些日志文件解析荷兰日期,但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"这个词没有问题。我能做些什么来克服它?

DateTime.对于本地化日期,TryParseExact返回false

看起来该文化没有使用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