Определите, как рассчитать время в разных часовых поясах, используя nodaTime и withZone для ZoneDateTime
При конвертации времени между часовыми поясами. Я нашел следующий код работает. Однако я не уверен, как программно, что положить в качестве моего смещения для конструктора для ZonedDateTime
, У меня был выбор одного из смещений на zoneChicago, который равен двум, потому что он либо с нашим без летнего времени, но как узнать, какой из них я использую, и для часовых поясов, которые имеют более двух, что лучше способ заполнить это смещение?
Спасибо,
Джим
var zoneLA = c.GetZoneOrNull("America/Los_Angeles");
var zoneChicago = c.GetZoneOrNull("America/Chicago");
var zdtChicago = new ZonedDateTime( LocalDateTime.FromDateTime(DateTime.Now)
, zoneChicago
, zoneChicago.MaxOffset);
var zdtLA = zdtChicago.WithZone(zoneLA);
1 ответ
Если вас интересует текущее время, вы можете сделать это намного проще - и даже более тестируемым. Заставь свой код взять IClock
как "сервис по предоставлению текущего момента времени". Для конкретной реализации используйте SystemClock.Instance
в производстве, но FakeClock
для тестирования.
IClock
имеет одного члена: Now
, Это возвращает текущий Instant
во времени, которое не привязано к часовому поясу или даже к календарной системе.
С Instant
и часовой пояс, вы можете легко добраться до ZonedDateTime
:
Instant now = clock.Now;
var zone = DateTimeZoneProviders.Tzdb["America/Los_Angeles"];
ZonedDateTime = now.InZone(zone);
Это будет работать, каковы локальные дата / время и смещение. Вам не нужно делать ничего умного:)