有人可以解释为什么以下代码输出“4/14/2013 8:00:00 PM”?
var dt = "2013-04-15+00:00";
var result = DateTime.Parse(dt);
答案 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"
部分将表示时区。