2017-04-03 13 views
0

私はWEB1とWEB2という2つのWebサーバーを持っています。関数:ASP.netは異なるサーバーで異なるレンダリングを行います

public static string ToTimeAgoHTML(this DateTime date) 
{ 
    return "<time class=\"timeago\" datetime=\"" + date.ToString("o") + "\">" + date.FriendlyDate() + "</time>"; 
} 

値が呼び出されました。 WEB2はこれをしないのに対し、WEB1は、最後にzをレンダリングすることを

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> 

注:これらはとしてレンダリングします。これにより、過去1時間にWeb2の要求が表示されています。

両方のWebサーバーのタイムゾーンは、Windowsでは(UTC) Coordinated Universal Timeに設定されています。

ここで何が起こっているのでしょうか?

+0

どのような文化ですか? – mason

+0

@Mason両方のWebサーバがIISの 'Invariant Language(Invariant Country) 'と同じです –

+0

実際のスレッドで検証します。 'Thread.CurrentThread.CurrentCulture'と' Thread.CurrentThread.CurrentUICulture'を確認してください – mason

答えて

1

出力ToString("o")を使用してはDateTimeあなたが合格のKind性質に関連しているとき:DateTimeKind.Utc

  • 、文字列はZで終了します - DateTimeKind.LocalでUTC
  • を意味しており、文字列がしますUTCからのオフセット(例えば、-07:00)で終了します。
  • DateTimeKind.Unspecifiedの場合、文字列は時間部分の後に終了します。これは、時間帯オフセット情報が伝達されないので、任意の時点であり得る。

これは、ISO8601標準と正確に揃っていることに注意してください。また、in the MSDN docsと記載されています。

1つのサーバーが他のサーバーと異なる出力を生成している理由を理解するには、データの取得元を特定する必要があります。私の推測では、Web1はDateTime.UtcNowに由来する値を送信しており、Web2はファイル、データベースから値を読み取っているか、種類を指定せずに手動で構築していると考えられます。

+0

あなたは正しいです、ありがとう!サーバーの1台がRedisから読んでいました。ここでKindは不特定でした。 –

+0

Redisからの取得に 'DateTime.SpecifyKind'を使います。 –

関連する問題