example - Determine si el horario de verano(DST) está activo en Java para una fecha especificada
offsetdatetime example (5)
tl; dr
ZoneId.of( "America/Montreal" )
.getRules()
.isDaylightSavings(
Instant.now()
)
java.time
Aquí está la java.time moderna de java.time (ver Tutorial ) de la Respuesta correcta de mamboking .
- Un
ZoneId
representa una zona horaria. La clase conoce las reglas que indican si el DST aplica a una zona horaria en particular . - La clase
ZoneRules
modela todas las transiciones históricas y futuras para una zona horaria. - Un
Instant
es un momento en la línea de tiempo en UTC . - Un
ZonedDateTime
es el resultado de aplicar unZoneId
a unInstant
.
Código de ejemplo:
ZonedDateTime now = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) );
…
ZoneId z = now.getZone();
ZoneRules zoneRules = z.getRules();
Boolean isDst = zoneRules.isDaylightSavings( now.toInstant() );
Observe cómo en la última línea tuvimos que extraer un objeto Instant
de nuestro objeto ZonedDateTime
con una simple llamada a toInstant
.
Tengo una clase de Java que toma la latitud / longitud de una ubicación y devuelve el desplazamiento GMT cuando el horario de verano está activado y desactivado. Estoy buscando una manera fácil de determinar en Java si la fecha actual es en horario de verano para poder aplicar el desplazamiento correcto. Actualmente solo estoy realizando este cálculo para las zonas horarias de EE. UU. Aunque eventualmente también me gustaría expandirlo a las zonas horarias globales
Esta es la respuesta para la máquina en la que se pregunta:
TimeZone.getDefault().inDaylightTime( new Date() );
Un servidor que trate de resolver esto para un cliente necesitará la zona horaria del cliente. Ver @Powerlord respuesta por la razón.
Para cualquier zona horaria particular
TimeZone.getTimeZone( "US/Alaska").inDaylightTime( new Date() );
Vas a tener que hacer un poco más de trabajo usando esas coordenadas y descubrir en qué zona horaria están. Una vez que sepas qué Zona horaria, el método isDayLight () sería útil.
Por ejemplo, no tiene forma de saber si -0500 es EST (hora estándar del este de EE. UU. / Canadá), CDT (hora central de EE. UU. Y Canadá), COT (hora de Colombia), AST (hora estándar de Brasil), ECT (Ecuador) Tiempo), etc ...
Algunos de estos pueden o no ser compatibles con el horario de verano.
Joda Time contiene métodos de manejo que calcularán las compensaciones para usted. Ver DateTimeZone.convertLocalToUTC(...)
Para complementar esto, deberá buscar la zona horaria actual con su información de latitud / longitud. GeoNames proporciona un cliente java para su servicio web, así como un marco de solicitud web simple (es decir, http://ws.geonames.org/timezone?lat=47.01&lng=10.2 )
TimeZone tz = TimeZone.getTimeZone("EST");
boolean inDs = tz.inDaylightTime(new Date());