2

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

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

5 回答 5

1

猜测一下,我认为 Anthony Pergram 的评论是正确的。很可能它将字符串解释为日期“2013-04-15”,时区为“+00:00”(格林威治标准时间),并且没有时间。默认时间是午夜,因此生成的日期等于“格林威治标准时间午夜 2013 年 4 月 15 日”。然后将其转换为比格林威治标准时间晚四个小时的本地时区,并按您所见的方式输出。

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

于 2013-04-15T17:59:06.620 回答
1

在不同的地区、文化、上下文等中格式化日期/时间的方法有很多。使用DateTime.Parse时会尽力猜测要做什么,但在确定哪种日期时间格式不明确的情况下通常会失败合适的。

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

于 2013-04-15T17:55:20.887 回答
0

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

于 2013-04-15T17:57:12.993 回答
0

MSDN 文档对此进行了深入的描述。

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

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

于 2013-04-15T18:02:02.777 回答
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"部分将表示时区。

于 2013-04-15T18:16:59.763 回答