2016-10-12 20 views
6

Yalnızca saat dilimini temsil eden bir dize varsa, dakikaları almanın en kolay yolu nedir? (Örneğin "Avrupa/Londra")NodeTime ile saat dilimi (dize) noktasından (dize) alın

Şimdiye kadar var:

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

    // Need magic code to get offset as minutes 
} 

Ama dakikaya dönüştürmek için kolay bir yaklaşım bulamıyorum.

NOT: İhtiyacım olan şey, kodun yürütüldüğü belirli bir andaki sapmadır. Bu saat dilimi ve UTC arasında.

+3

Hangi uzaklıktan? Zamanla değişir. Şu anda 60 dakika, ama 30 Ekim'de geri dönecek 0 ... –

+0

@JonSkeet Üzgünüm, yani kodun yürütüldüğü o andaki ofset demek istiyorum. Bu saat dilimi ve UTC arasında. –

+0

Doğru - lütfen belirtmek için soruyu güncelleyin. –

cevap

14
+0

Teşekkür ederim Bay Skeet . –

+2

@AxelPrieto: Sadece btw'yi düzenledim, aksi halde sonucu "int" 'ye çevirmek zorunda kaldınız. –

-2

Dakikada DatePart() işlevini kullanın.

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

Sen yöntemde SystemClock.Instance kullanmak yerine IClock parametreyi atlanıp, ama bu test etmek zordur kod yol açar:

+0

Bu yeterli değil. "DateTime" yok, bir TimeZone'um var. Ve dakikalara ihtiyacım var, bu yüzden "Amerika/Buenos Aires" yerine -90'a ihtiyacım var (dakika cinsinden uzaklık) –

+3

"DatePart" ın bu soruyu yanıtladığını göremiyorum ... –