我有两个网络服务器,WEB1和WEB2。功能:
public static string ToTimeAgoHTML(this DateTime date)
{
return "<time class=\"timeago\" datetime=\"" + date.ToString("o") + "\">" + date.FriendlyDate() + "</time>";
}
调用值。这些呈现为:
WEB1
<time class="timeago" datetime="2017-04-03T15:12:04.9072263Z">3 Apr, 2017</time>
WEB2
<time class="timeago" datetime="2017-04-03T15:12:04.9072263">3 Apr, 2017</time>
请注意,Web1最后会使用z
进行渲染,而Web2则不会执行此操作。这导致Web2上的请求在过去1小时内显示。
两个网络服务器时区都在Windows中设置为(UTC) Coordinated Universal Time
。
有谁知道这里会发生什么?
答案 0 :(得分:1)
使用ToString("o")
时的输出与您传入的Kind
的{{1}}属性相关:
DateTime
时,字符串将以DateTimeKind.Utc
结尾 - 表示UTC Z
,字符串将以UTC的偏移量结束,例如DateTimeKind.Local
。-07:00
,字符串将在时间部分之后结束。这可以是任何时间点,因为没有传达时区偏移信息。请注意,这与ISO8601标准完全一致。它还描述了in the MSDN docs。
要弄清楚为什么一台服务器产生的输出不同于另一台服务器,你必须弄清楚它们从哪里获取数据。我的猜测是Web1正在发送一个源自DateTimeKind.Unspecified
的值,而Web2正在从文件,数据库中读取值,或者手动构建它而不指定类型。