2013-03-04 8 views
8

System.TimeZoneInfo ha un metodo chiamato IsDaylightSavingTime, che accetta un oggetto DateTime e restituisce true se il datetime specificato cade nell'ora legale per quel fuso orario. Esiste una funzione equivalente in NodaTime o un altro modo per ottenere lo stesso risultato?Qual è l'equivalente di System.TimeZoneInfo.IsDaylightSavingTime in NodaTime?

+0

Ho aggiunto ora una richiesta di funzionalità per includerla direttamente in ZonedDateTime: https://code.google.com/p/noda-time/issues/detail?id=264 –

risposta

9

È possibile ottenere questo da un ZoneInterval. Ecco un metodo di estensione che ti aiuterà.

public static bool IsDaylightSavingsTime(this ZonedDateTime zonedDateTime) 
{ 
    var instant = zonedDateTime.ToInstant(); 
    var zoneInterval = zonedDateTime.Zone.GetZoneInterval(instant); 
    return zoneInterval.Savings != Offset.Zero; 
} 

ora si può fare:

zdt.IsDaylightSavingsTime(); 

Se non si dispone di un ZonedDateTime, è possibile ottenere uno da un DateTimeZone più o un Instant o un LocalDateTime. Oppure puoi massaggiare questo metodo di estensione per prenderli come parametri.

Aggiornamento: Questa funzione è ora inclusa in Noda Time v1.3 e versioni successive, quindi non è più necessario scrivere il metodo di estensione da soli.

Problemi correlati