0

複数のタイムゾーンのユーザーにDateTimeを表示する方法を理解するのに苦労している友人がいますが、ユーザーのタイムゾーンに合わせて日付を調整していません。たとえば、アリゾナカリフォルニアネバダにそれぞれ州の適切なタイムゾーンを持つサーバーがあるとします。ユーザーがアリゾナ時間の午前9:00としてレコードを保存する場合、ユーザーに表示されるときに、カリフォルニアネバダのサーバーに午前9:00として表示されるようにします。データベースはSQLServer、2008年だと思います。

彼はどうやってそれをやろうとしていますか?UTC DateTime値と関係があると思いますか?とにかく、私たちは合意に達することができないようで、彼がイライラしていると言うことができるので、彼がこれをどのように達成できるかについての「完全な」例をいただければ幸いです...

前もって感謝します!

4

2 に答える 2

3

彼らが実際に入力しているのは現地時間のようで、特定のタイムゾーンを実際に参照しているわけではありません。これは、の動作に最も近いものですDateTimeKind.Unspecified(ローカルではなく、「サーバーのローカルタイムゾーン内」を意味します。これは別の問題です)。

SQL Serverがデータの保存または取得時に実際にタイムゾーン変換を実行するとは思わないが、取得後に使用して「指定なし」の種類を明示的に作成することは、おそらく友人の価値がありますDateTime.SpecifyKind。それは後で彼の問題を救うことができます。

彼はどこでもUTCを使用できましたが、実際にはUTCの日付/時刻ではないようです...それは「どこにいても現地時間」であり、まったく異なります。

もちろん、この時点で私自身のNoda TimeLocalDateTimeプロジェクトは言うまでもありませんが、友人が望んでいるのは、適切な日付/時刻タイプのセットを使用することで、コード内でこれらすべてをまっすぐに保つことがはるかに簡単になることです。 。友達がデータベースコード自体以外の場所でNodaTimeを使用することをお勧めします。aLocalDateTimeDateTimeusingToDateTimeUnspecifiedに変換し、その逆を。で変換できますFromDateTime

あなたとあなたの友人は、コアコンセプトタイプの選択のページを読んで、より多くの思考の糧を得たいと思うかもしれません-野田タイムを使用するかどうかにかかわらず、利用可能な日付/時刻の種類についてより慎重に考えるようになることを願っています。それでも確信が持てない場合は、私の暴言を読むことができます:)DateTime

于 2012-04-24T18:09:34.687 に答える
0

友達がSQL内に時間を直接保存できるようです。たとえば、現地時間の午後9時にカリフォルニアとアリゾナの2つのサーバーが次のクエリを実行すると、2つの午後9時の値が挿入されます。

SqlCommand cmd = new SqlCommand("INSERT INTO table (Date) VALUES (@value)", conn);
cmd.Parameters.AddWithValue("@value", DateTime.Now.ToString("yyyy-mm-dd hh:mm:ss"));
cmd.ExecuteNonQuery();

UTC時刻を挿入する場合は、SQL Server 2008の同等のconvert_tz機能を確認することをお勧めします。UTC時刻とサーバーが構成されているタイムゾーンを保存すると、変換を実行できるようになります。サーバーの時間に。

 SELECT convert_tz(table.UtcTime, 'UTC', table.TimeZone) FROM table
于 2012-04-24T18:06:53.713 に答える