2017-04-03 97 views
0

我有两个Web服务器,WEB1和WEB2。功能:ASP.net在不同服务器上的时间渲染不同

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

什么是文化? – mason

+0

@Mason这两个网络服务器是相同的在IIS'不变语言(不变国家)' –

+0

我会验证实际的线程。检查'Thread.CurrentThread.CurrentCulture'和'Thread.CurrentThread.CurrentUICulture' – mason

回答

1

在使用ToString("o")是关系到你在通过DateTimeKind属性的输出:

  • 随着DateTimeKind.Utc,该字符串将与Z结束 - 这标志着UTC
  • 随着DateTimeKind.Local,该字符串将以UTC的偏移结束,例如-07:00
  • With DateTimeKind.Unspecified,该字符串将在时间部分之后结束。这可能是任何时间点,因为没有传送时区偏移信息。

请注意,这与ISO8601标准完全一致。它也被描述为in the MSDN docs

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

+0

你是对的,谢谢!其中一台服务器正在从Redis那里读取,那里的种类没有说明。 –

+0

从Redis检索时使用'DateTime.SpecifyKind'。 –

相关问题