2016-10-12 5 views
6

Какой самый простой способ получить минуты, если у меня есть только строка, представляющая часовой пояс? (Например, «Europe/London»)Получите смещение минут от часовой пояс (строка) с помощью NodaTime

До сих пор у меня есть:

public static int ConvertFromTimeZoneToMinutesOffset(string timeZone) 
{ 
    DateTimeZone zone = DateTimeZoneProviders.Tzdb[timeZone]; 

    // Need magic code to get offset as minutes 
} 

Но я не найти простой подход, чтобы преобразовать его в минуты.

ПРИМЕЧАНИЕ. Мне нужно смещение в тот конкретный момент, в котором выполняется код. Между этим часовым поясом и UTC.

+3

Какое смещение? Он меняется со временем. Сейчас это 60 минут, но 30 октября он вернется к 0 ... –

+0

@JonSkeet Извините, я имею в виду смещение в тот конкретный момент, в который выполняется код. Между этим часовым поясом и UTC. –

+0

Правильно - пожалуйста, обновите вопрос, чтобы указать это. –

ответ

14

Вам нужно DateTimeZone.GetUtcOffset(Instant):

public static int ConvertFromTimeZoneToMinutesOffset(string timeZone, IClock clock) 
{ 
    DateTimeZone zone = DateTimeZoneProviders.Tzdb[timeZone]; 
    Offset offset = zone.GetUtcOffset(clock.Now); 
    return offset.Milliseconds/NodaConstant.MillisecondsPerMinute; 
} 

Вы могли оставить от параметра IClock и вместо того, чтобы использовать SystemClock.Instance в методе, но это приводит к коду, который тверже, чтобы проверить.

+0

Большое спасибо Mr. Skeet , –

+2

@AxelPrieto: Я только что отредактировал его, так как иначе вам придется придать результат «int». –

-2

Используйте функцию DatePart() в минутах.

+0

Этого недостаточно. У меня нет «DateTime», у меня есть TimeZone. И мне нужны минуты, поэтому вместо «Америка/Буэнос-Айрес» мне нужно -90 (смещение в минутах) –

+3

Я не вижу, что 'DatePart' отвечает на этот вопрос вообще ... –

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

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