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

ASP.net time rendering differently on different servers

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

有人知道这里会发生什么吗?

使用ToString("o")时的输出与你传入的DateTimeKind属性有关:

  • 使用 DateTimeKind.Utc,字符串将以 Z 结尾 - 这表示 UTC
  • 使用 DateTimeKind.Local 时,字符串将以 UTC 的偏移量结尾,例如 -07:00.
  • 使用DateTimeKind.Unspecified,字符串将在时间部分之后结束。这可能是任何时间点,因为没有传达时区偏移信息。

请注意,这完全符合 ISO8601 标准。也描述了in the MSDN docs.

要弄清楚为什么一台服务器产生的输出与另一台不同,您必须弄清楚它们从哪里获取数据。我的猜测是 Web1 正在发送一个源自 DateTime.UtcNow 的值,而 Web2 正在从文件、数据库读取一个值,或者在没有指定类型的情况下手动构建它。