我有这个转换:
DateTime dateTime;
DateTime.TryParseExact("01/02/2013", "mm/dd/yyyy", null, DateTimeStyles.None, out dateTime);
以下断言失败:
Assert.AreEqual(new DateTime(2013, 1, 2), dateTime);
因为 TryParseExact 将日期时间增加一小时:
Expected: 2013-01-02 00:00:00.000
But was: 2013-01-02 00:01:00.000
这是否与夏令时有关,如果是,是否意味着我不应该使用 DateTimeStyles.None?
最佳答案
您的格式 "mm/dd/yyyy"
表示分钟/天/年。您需要 "MM/dd/yyyy"
(月份大写)。此外,通过传递 null
您实际上是在说:使用当前区域性的日期时间格式。您可能想要使用 CultureInfo.InvariantCulture
。
DateTime.TryParseExact("01/02/2013", "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime);
如果当前区域性不使用 /
作为日期分隔符,这也可以防止出现问题。例如,德国使用 .
作为分隔符,因此格式字符串 "MM/dd/yyyy"
将被评估为 "MM.dd.yyyy"
。 Read .
关于c# - DateTime.TryParseExact 加一分钟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26020290/