我有这个转换:
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?
答案 0 :(得分:9)
您的格式"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
答案 1 :(得分:2)
您的格式存在问题,小写mm
用于月份的分钟,大写为MM
。您在值之间看到的差异是1分钟,而不是1小时。
使用:
DateTime.TryParseExact("01/02/2013", "MM/dd/yyyy", null, DateTimeStyles.None, out dateTime);