C# DateTime.TryParseExact增加一分钟?

C# DateTime.TryParseExact增加一分钟?,c#,datetime,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 w

我有这样的转换:

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

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

使用:

您的格式为“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”

matchValue
的值是多少,而且TryParseExact希望通过传递
null
来使用类似于
MM/dd/yyyy
的格式。实际上,您说:使用当前区域性的日期时间格式。也许你想使用
CultureInfo.InvariantCulture
。谢谢你指出。mm是你需要使用mm的分钟格式。没关系,@Reniuz发现了它。用荷马·辛普森的话来说-DOH!我用“yyyy-mm-dd”而不是“yyy-mm-dd”犯了同样的错误
DateTime.TryParseExact("01/02/2013", "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime);