2013-04-15 50 views
2

有人可以解释为什么下面的代码输出“2013年4月14日8:00:00 PM”吗?为什么c#DateTime.Parse似乎不正确地解释字符串?

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

可能是UTC字符串,并且您正在东部时区运行,当前时间比UTC UTC时间晚4个小时,并且Parse是本地的。检查结果的UTC日期,看看它说什么。 –

+0

@Anthony Pegram,你是对的。 – Samora

回答

1

格式化日期/时间在不同的地域,文化,环境等。当使用DateTime.Parse将尽最大努力猜测做什么的许多方式,但它往往是不成功的情况下,在确定哪种日期时间格式合适时存在歧义。

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

0

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

1

有人猜测,我认为安东尼佩克拉姆的评论是正确的。很可能它将字符串解释为日期,“2013-04-15”,时区为格林威治标准时间的“+00:00”,并且没有时间。默认时间是午夜,所以结果日期等于“2013-04-15午夜GMT”。然后转换为当地时区,比格林威治标准时间落后四个小时,并按照您所看到的输出。

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

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"部分将意味着时区。

相关问题