ASP.net时间在不同服务器上的呈现方式不同

时间:2017-04-03 14:15:50

标签: asp.net iis-7 timezone timezone-offset

我有两个网络服务器,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

有谁知道这里会发生什么?

1 个答案:

答案 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正在从文件,数据库中读取值,或者手动构建它而不指定类型。