2017-01-15 61 views
2

我有一個數據庫,其中所有日期都是UTC,並且驅動程序始終會發送DateTime對象與DateTimeKind.Unspecified。我想假設他們在UTC並轉換爲當地時間。將DateTime與DateTimeKind.Unspecified從utc轉換爲本地

使用NodaTime實現此目的最簡單的方法是什麼?

Instant.FromDateTimeUtc(utcDate).InZone(localZone);不斷抱怨DateTimeKind應該是Utc。

回答

4

如果你使用絕對時間野田並希望ZonedDateTime,你可以「告訴」野田時間,你真的得到一個UTC值,然後將其轉換:

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

或者你可以只使用DateTime.SpecifyKind入手:

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

...然後使用您現有的代碼,或者如果你想取野田佳彥時間出來的圖片完全。

事實上,就DateTime.ToLocalTime()就可以了,如果你不需要野田佳彥時間在別處:

var localDateTime = utcDateTime.ToLocalTime(); 

...首創置業將假定未指定的日期/時間 UTC,如果你在打電話ToLocalTime()它。當然,我推薦使用野田時間無處不在:)

+0

謝謝!我實際上想要使用NodaTime,因爲不同的用戶可以設置自己的時區。 – Natan

+0

@Natan:很高興聽到它 - 使用野田時間清楚正確的事情:) –

相關問題