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")
时的输出与你传入的DateTime
的Kind
属性有关:
- 使用
DateTimeKind.Utc
,字符串将以 Z
结尾 - 这表示 UTC
- 使用
DateTimeKind.Local
时,字符串将以 UTC 的偏移量结尾,例如 -07:00
.
- 使用
DateTimeKind.Unspecified
,字符串将在时间部分之后结束。这可能是任何时间点,因为没有传达时区偏移信息。
请注意,这完全符合 ISO8601 标准。也描述了in the MSDN docs.
要弄清楚为什么一台服务器产生的输出与另一台不同,您必须弄清楚它们从哪里获取数据。我的猜测是 Web1 正在发送一个源自 DateTime.UtcNow
的值,而 Web2 正在从文件、数据库读取一个值,或者在没有指定类型的情况下手动构建它。
我有两个网络服务器,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")
时的输出与你传入的DateTime
的Kind
属性有关:
- 使用
DateTimeKind.Utc
,字符串将以Z
结尾 - 这表示 UTC - 使用
DateTimeKind.Local
时,字符串将以 UTC 的偏移量结尾,例如-07:00
. - 使用
DateTimeKind.Unspecified
,字符串将在时间部分之后结束。这可能是任何时间点,因为没有传达时区偏移信息。
请注意,这完全符合 ISO8601 标准。也描述了in the MSDN docs.
要弄清楚为什么一台服务器产生的输出与另一台不同,您必须弄清楚它们从哪里获取数据。我的猜测是 Web1 正在发送一个源自 DateTime.UtcNow
的值,而 Web2 正在从文件、数据库读取一个值,或者在没有指定类型的情况下手动构建它。