DateTime.TryParseExact增加一分钟?

时间:2014-09-24 15:02:46

标签: c# datetime

我有这个转换:

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?

2 个答案:

答案 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);