2012-09-28 7 views
6

私のASP.NETアプリケーションでは、コードfrom hereを使用して、アプリケーションのビルド日付をUTCとして検索します。次のようにアセンブリファイルから読み込んUTC値は、その後にフォーマットされています同じDateTime値を使用すると、異なるユーザーの表示時間が異なるのはなぜですか?

//DateTime time  
return time.ToString("dd MMM yyyy HH:mm:ss"); 

今、一人のユーザーは、そのアプリケーションが提供するページを開き、

28 сен 2012 04:13:56 

を見て、同じページを開き、他のユーザに通知しますそして両方の要求は非常に同じパッケージからのWindows Azureの仮想マシンをきれいにするために配備同じアプリケーションによって提供されている

27 Sep 2012 12:14:32 

を見ているので、それは正確に確実のため、実行されている同じコードです両方のユーザー。

明らかに、異なるユーザーからの要求のローカライゼーションが異なるため、文字列のフォーマットが異なります。 1人のユーザーが月がSepと表示され、もう1人がсен(ロシア語でSepに相当)と表示されます。

なぜ時間が異なりますか?彼らはまた、ローカリゼーションに依存するいくつかのタイムゾーンに従って調整されていますか?

+0

曜日と時間は違う:明らかに、9月28日にロシアで午前4時、それは別の場所(確かに地球の西部にある)27番地で12です...しかし、奇妙なことは分/秒が変わるべきでないということです – Kek

答えて

3

もっとも明白な説明は、実際にはDateTimeの値が異なるということです。

は、あなたがリンクされたコードは、GetCallingAssemblyを使用して、あなたは注意する必要があり、そのMSDN saysこと:

GetCallingAssemblyメソッドを呼び出す方法は、ジャストインタイム(JIT)コンパイラによってインライン展開されている場合、またはこれらが同一である場合、あなたはそれが表示上の問題を知っている:その呼び出し側はGetCallingAssemblyによって返されるアセンブリが予期せず

はこれをデバッグするために、私はtime.Tickstime.Kindを表示して開始すると異なる可能性があり、インライン展開されています。それらが異なっている場合は、時間価値をどのように生成しているかを調べる必要があります。

+0

はい、それです。タイムスタンプを読み取る関数を呼び出すコードは、実際の展開時にプリコンパイルされた.aspxの内部にあります。したがって、呼び出しがインライン化されているかどうかによって、ビルドの時間またはASP.NETのプリコンパイルの時間のいずれかになります。 – sharptooth

+0

特定の関数のインライン展開を無効にする方法は次のとおりです。http://stackoverflow.com/a/5169272/57428 – sharptooth

関連する問題