为什么c#DateTime.Parse似乎错误地解释了字符串?

时间:2013-04-15 17:52:15

标签: c# parsing datetime

有人可以解释为什么以下代码输出“4/14/2013 8:00:00 PM”?

var dt = "2013-04-15+00:00";
var result = DateTime.Parse(dt);

5 个答案:

答案 0 :(得分:1)

在不同的地区,文化,背景等中有多种格式化日期/时间的方式。使用DateTime.Parse时,它会尽力猜测该怎么做,但它会在确定哪种日期时间格式合适的情况下,通常不成功。

您可以使用DateTime.ParseExact来指定字符串用于格式化日期的确切格式。

答案 1 :(得分:1)

据猜测,我认为Anthony Pergram的评论是正确的。最有可能的是它将字符串解释为日期,“2013-04-15”,时区为“+00:00”,即GMT,而且没有时间。默认的时间是午夜,因此生成的日期等于“2013-04-15 at GMT午夜”。然后将其转换为您当地的时区,比GMT晚四个小时,然后输出如您所见。

如果可以,您应该使用更精确的日期/时间格式,例如ISO 8601,它看起来像“2013-04-15T00:00:00Z”,或“2013-04-15T00:00:00- 04:00"

答案 2 :(得分:0)

这是因为它考虑了您的系统时区。然后适当调整指定的时间

答案 3 :(得分:0)

MSDN文档深入介绍了这一点。

http://msdn.microsoft.com/en-us/library/1k1skd40(v=vs.90).aspx

由于+00:00,它正在以UTC格式读取字符串。它是在当地时间打印出来的。

答案 4 :(得分:0)

字符串的"+00:00"部分被解释为时区。这是格林威治以东0小时0分钟的“地理”区域。

如果您打算将"+00:00"部分改为一天中的时间,请使用格式字符串,如下所示:

var dt = "2013-04-15+00:00";
var result = DateTime.ParseExact(dt, "yyyy-MM-dd+HH:mm", CultureInfo.InvariantCulture);

"HH""mm"表示(当地)时间的小时和分钟。相反,使用"yyyy-MM-ddzzz""+00:00"部分将表示时区。