2011-05-20 17 views
5

Tengo información de fecha/hora de Berlín, Alemania. Por ejemplo: 2011-05-16 12:24:23 , 2011-01-21 17:00:31restauración de DST bajo Linux en C

Desafortunadamente, estos tiempos no tienen información de horario de verano. Sé que la primera cita es CEST y la segunda es CET.

podría escribir un cheque si la fecha/hora es el horario de verano o no.

El horario de verano comienza en el último domingo de marzo a las 2:00 de la mañana, y termina en el último domingo de octubre a las 3 AM.

Ser el desarrollo de un control de este tipo parece propenso a errores para mí. ¿Hay algo que ya se pueda usar bajo Linux en C?

Gracias por su ayuda.

Respuesta

1

Puede pasar el argumento %Z formato al comando date para obtener la zona horaria a partir de una fecha, a continuación, determinar si el horario de verano estaba en efecto a partir del nombre de la zona horaria:

$ date -d '2011-05-16' '+%Z' 
CEST 

$ date -d '2011-01-21' '+%Z' 
CET 
2

Se puede convertir el tiempo a un time_t con mktime() y luego devuélvalo a localtime() que configurará tm_isdst. Tanto mktime() y localtime() utilizan la configuración de tiempo de su sistema local, por lo que realmente están descubriendo si la marca de tiempo está en el horario de verano donde se encuentre. El problema obvio aquí es que tienes una cadena de marca de tiempo sin información geográfica, así que lo mejor que puedes hacer es asumir que es para tu ubicación actual.