有人可以解释为什么以下代码输出“4/14/2013 8:00:00 PM”吗?
var dt = "2013-04-15+00:00";
var result = DateTime.Parse(dt);
猜测一下,我认为 Anthony Pergram 的评论是正确的。很可能它将字符串解释为日期“2013-04-15”,时区为“+00:00”(格林威治标准时间),并且没有时间。默认时间是午夜,因此生成的日期等于“格林威治标准时间午夜 2013 年 4 月 15 日”。然后将其转换为比格林威治标准时间晚四个小时的本地时区,并按您所见的方式输出。
如果可以,您应该使用更精确的日期/时间格式,例如 ISO 8601,看起来像“2013-04-15T00:00:00Z”或“2013-04-15T00:00:00-04:00” "
在不同的地区、文化、上下文等中格式化日期/时间的方法有很多。使用DateTime.Parse
时会尽力猜测要做什么,但在确定哪种日期时间格式不明确的情况下通常会失败合适的。
您可以使用DateTime.ParseExact
来指定字符串用于格式化日期的确切格式。
那是因为它考虑了您的系统时区。然后适当调整指定的时间
MSDN 文档对此进行了深入的描述。
http://msdn.microsoft.com/en-us/library/1k1skd40(v=vs.90).aspx
由于 +00:00,它正在以 UTC 格式读取字符串。它是在当地时间打印出来的。
您的"+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"
部分将表示时区。