2017-01-15 1 views
2

У меня есть база данных, где все даты UTC, и драйвер всегда отправляет мне DateTime объектов с DateTimeKind.Unspecified. Я хочу предположить, что они находятся в UTC и конвертируются в местное время.Преобразование DateTime с DateTimeKind.Unspecified from utc в local

Каков самый простой способ достичь этого с помощью 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(); 

... BCL будет считать, что неопределенный дата/время является UTC, если вы звоните ToLocalTime() на Это. Конечно, я бы рекомендовал везде использовать Noda Time :) :)

+0

Спасибо! Я действительно хочу использовать NodaTime, потому что разные пользователи смогут устанавливать свои собственные часовые пояса. – Natan

+0

@Natan: Рад это слышать - используя Noda Time ясно, что нужно делать :) –

 Смежные вопросы

  • Нет связанных вопросов^_^