3

DateTimeの複雑さが今日沈んだばかりなので、私はしばらくの間洞窟に住んでいたかもしれないと思います. DateTime常にデータベースに保存しUTC、ビューに現地時間として表示する ことを推奨するいくつかの記事を読みました。

ただし、それはそれほど単純ではなく、「インスタント」を考慮する必要があり、入力されたユーザーを変換するのは難しい、または使用するのは安全ではない、または投稿してローカル時間を表示するために使用できるという記事DateTimeUTCヒットTimeZone IdToUniversalTime()ましJavaScriptたがUTC DateTime、モデル プロパティを持つビューJSがある場合はどうなりますか? 頼っても安全とは言えません。RazorDateTimeToLocalTime()

Jon Skeet から Noda Time について聞いたことがありますが、これですべてが解決することを願っていますが、彼が完璧ではないとコメントしていることは知っています。

では、非常に単純な Web アプリケーションでさえ、一体何を使用しているの.Netでしょうか。

どの投稿を提供またはリンクして、タイムゾーンに共感する値をレンダリングできる正しい例はありますか?

無知は至福のようです。

更新:たとえば、ユーザーが jQuery の DateTimePicker を持っていて、イベントの日時を選択するとします。アプリケーションのユーザーはグローバルであるため、米国東部時間の午前 10 時を選択すると、英国のユーザーには午後 6 時としてビューに表示されます。

4

2 に答える 2

1

私はそれを行う方法を伝えることができます。.NET にはKindというプロパティがあります。私がしていることは、データベースに UserTimeZome と呼ばれる文字列フィールドがあり、ユーザー設定のどこかに、ユーザーが自分のタイムゾーンを設定できるということです。このコードを使用して、ドロップダウン リストを列挙できます。

ユーザーが自分のタイム ゾーンを選択したら、DisplayNameをデータベースの UserTimeZone フィールドに保存します。これで、UTC 時間をローカル タイム ゾーンに変換したり、その逆を行ったりできるようになりました。ConvertTimeToUtcメソッドまたはConvertTimeFromUtcメソッドを使用できます。新しい DateTime を作成し、DateTime コンストラクターで Kind を設定して、必ず Kind プロパティを更新してください。

それとともに、任意の日付/時刻を現地時間または UTC 時間に変換できます。これを C# からではなく JavaScript から行う必要がある場合は、MomentJsを使用します。MomentJs は、UTC 関数を使用して UTC と現地時間との間で変換できます。

これがお役に立てば幸いです

于 2013-04-08T21:22:41.923 に答える
1

私たちが持っているすべてのテクノロジを見てみましょう: SQL Server (MS スタックのために SQL Server を使用していると思います) - DATETIME型はタイム ゾーン オフセット範囲を格納しないため、それらを保持する以外のオプションはありません。 UTCで。

.NET には、DateTime 型のタイム ゾーンを操作するオプションがあります。したがって、データベースから値をロードし、何らかの方法でユーザーのタイムゾーンに変更できます。これは良い質問です。ユーザーのタイムゾーンを判断する方法は? ユーザーがサイズに登録した場合、「タイムゾーン」などの設定を使用してすべてのユーザーに保存できます (サイトのブランチは、Sharepoint などでこれを行います)。ビューをレンダリングするたびに、この設定を使用し、正しいタイムゾーンでビューをレンダリングします。これに関する問題は、キャッシュを使用する必要がある場合、ユーザーのタイムゾーンに基づいてキャッシュする必要があることです (最高ではありません)...

しかし、匿名のユーザーがいて、そのユーザーに関する情報がない場合はどうでしょうか。

JavaScript について見てみましょう。JavaScript を使用すると、タイム ゾーンを操作できます。サーバー上のすべての日付関連の文字列を としてレンダリングできます<date>2013-04-08T12:00:00Z</date>。これは、その日付を UTC で示します。その後、ビュー上onloadのすべてのタグを見つけdateてブラウザーのタイム ゾーンに変換する JS コードを起動できます。(この問題についての記事があります タイムゾーンをサポートするWebアプリケーションの開発、文法の間違いがたくさんあります。申し訳ありません)。

したがって、私にとっては、これを行う正しい方法は、ユーザーに表示されなくなるまですべてを UTC に保つことです。日付を含むデータをサーバーに送信する必要があるたびに、ビューのみがユーザー タイム ゾーンの日付で操作する必要があります (この場合、これは JavaScript レイヤーのみである必要があります)。この日付を UTC に変換する必要があります。サーバーから日付を取得するたびに、最初にブラウザーのタイムゾーンに変換し、その後ユーザーに表示します。

于 2013-04-08T21:05:31.400 に答える