ユーザーにとって絶対時間よりも相対時間が重要な状況があります。そのため、「CDT の午後 1 時にイベントが発生し、現在は 5 日後の CST の午後 5 時です」というよりも、「イベントが 5 日と 5 時間前に発生した」とすばやく言えることが重要です。
日付を UTC で保存し、変換してユーザーに表示します。
pDateTime = DateTime.SpecifyKind(pDateTime, DateTimeKind.Utc);
DateTimeZone dateTimeZone = DateTimeZoneProviders.Tzdb[pCurrentUser.PreferredTimezone];
return Instant.FromDateTimeUtc(pDateTime).InZone(dateTimeZone).ToString("HH':'mm':'ss' 'MM'/'dd'/'yy' 'x", CultureInfo.InvariantCulture);
NodaTime 1.2 が完全にリリースされた時点で使用し、以前はバニラの ToString を使用していました。
ただし、このパターンを使用する時間は、現在の夏時間の状況ではなく、その時間の夏時間の状況を使用することになります。16:15:32 10/25/13 CDT
これは、 CST に移行したにもかかわらず、時間が次のように見えることを意味します。
これは時間の絶対的な尺度です。これにより、ユーザーは次の論理を実行する必要があります。「それはどれくらい前のことですか?今は夏時間ですか?そうであれば、差は x です。そうでない場合は、1 時間を足すか引くかしなければなりませんか?それが差 y になります。」
一方、15:15:32 10/25/13 CST
DST がない場合は、時間の相対的な尺度が表示されます。これにより、ユーザーは変換を行う必要がなくなり、コンテキスト内でその時間が何を意味するかをはるかに簡単に計算できるようになります。
多数の日付があるディスプレイでは、セット全体で絶対時間ロジックを実行するのが難しい場合があります。一度やるとうまくいくのは難しいです。ただし、「posted 5 hours ago」のような親しみやすい相対文字列は、日付と時刻の両方を自分で解決することも強制します。その情報は依然として重要です。
妥協案として、最初の 24 時間は投稿された空白の時間/分前に行うか、わかりやすい文字列と絶対時間の両方を含めることが考えられます。これらは両方とも、私が見たパターンです。
しかし、それらを無視して、相対コンテキストで表示される時間を取得するために、NodaTime に特定の昼光ステータスを時間に吹き込む方法はありますか?