2017-01-15 25 views
2

私はすべての日付がUTCのデータベースを持っていますが、ドライバはいつもというオブジェクトをDateTimeKind.Unspecifiedで送信します。私はそれらがUTCであり、現地時間に変換されていると仮定したいと思います。日付時刻をDateTimeKindで変換するutcからローカル

NodaTimeを使用してこれを達成する最も簡単な方法は何ですか?

Instant.FromDateTimeUtc(utcDate).InZone(localZone);は、DateTimeKindがUtcでなければならないと不満を持ち続けます。

var zoned = LocalDateTime.FromDateTime(utcDate) 
         .InZoneStrictly(DateTimeZone.Utc) 
         .WithZone(localZone); 

それとも、ただ使用できます。

答えて

4

するとあなたは間違いなく野田時間を使用してZonedDateTimeを希望している場合、あなたは本当にUTC値を持っている野田時間を「伝える」ことができ、それを変換しますDateTime.SpecifyKindはで開始します。

var utcDateTime = DateTime.SpecifyKind(unspecifiedDateTime, DateTimeKind.Utc); 

...そして、あなたの既存のコードを使用するか、またはあなたがしたい場合は、画像のうち、野田時間を完全に取ります。あなたが他の場所で野田時間を必要としない場合

確かに、ちょうどDateTime.ToLocalTime()は大丈夫のようになります。

var localDateTime = utcDateTime.ToLocalTime(); 

を... BCLは、あなたがToLocalTime()を呼び出す場合、不特定の日付が/時刻 UTCであることを前提としていますそれ。もちろん、どこでもノーダタイムを使用することをおすすめします:)

+0

ありがとう!実際にNodaTimeを使用したいのは、異なるユーザーが独自のタイムゾーンを設定できるからです。 – Natan

+0

@Natan:それを聞いてうれしいです - 野田の時間を使用して右のことは明らかです:) –

関連する問題