DateTime.TryParseExact增加了一分钟

本文关键字:一分钟 增加 TryParseExact DateTime | 更新日期: 2023-09-27 18:24:10

我有这个转换:

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。无?

DateTime.TryParseExact增加了一分钟

您的格式"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"阅读

您的格式有问题,小写mm用于表示月份的分钟数,它是大写MM。您看到的值之间的差异是1分钟,而不是1小时。

用途:

DateTime.TryParseExact("01/02/2013", "MM/dd/yyyy", null, DateTimeStyles.None, out dateTime);