有人可以解释为什么下面的代码输出“2013年4月14日8:00:00 PM”吗?为什么c#DateTime.Parse似乎不正确地解释字符串?
var dt = "2013-04-15+00:00";
var result = DateTime.Parse(dt);
有人可以解释为什么下面的代码输出“2013年4月14日8:00:00 PM”吗?为什么c#DateTime.Parse似乎不正确地解释字符串?
var dt = "2013-04-15+00:00";
var result = DateTime.Parse(dt);
MSDN文档对此进行了深入描述。
http://msdn.microsoft.com/en-us/library/1k1skd40(v=vs.90).aspx
它在UTC字符串中读becasue的+00的:00。它在当地时间打印出来。
有格式化日期/时间在不同的地域,文化,环境等。当使用DateTime.Parse
将尽最大努力猜测做什么的许多方式,但它往往是不成功的情况下,在确定哪种日期时间格式合适时存在歧义。
您可以使用DateTime.ParseExact
来指定字符串用于格式化日期的确切格式。
这是因为它考虑到您的系统时区。然后它适当地调整指定的时间
有人猜测,我认为安东尼佩克拉姆的评论是正确的。很可能它将字符串解释为日期,“2013-04-15”,时区为格林威治标准时间的“+00:00”,并且没有时间。默认时间是午夜,所以结果日期等于“2013-04-15午夜GMT”。然后转换为当地时区,比格林威治标准时间落后四个小时,并按照您所看到的输出。
如果可以,您应该使用更精确的日期/时间格式,如ISO 8601,它看起来像“2013-04-15T00:00:00Z”或“2013-04-15T00:00:00 -04:00“
字符串的"+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"
部分将意味着时区。
可能是UTC字符串,并且您正在东部时区运行,当前时间比UTC UTC时间晚4个小时,并且Parse是本地的。检查结果的UTC日期,看看它说什么。 –
@Anthony Pegram,你是对的。 – Samora