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



我有两个网络服务器,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标准完全一致。 MSDN 文档中也对此进行了描述。

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

相关内容

  • 没有找到相关文章

最新更新