zona studio que para horaria google como canarias agregar actualizar c timezone getdate strptime timezoneoffset

studio - strptime en c con compensaciones de zona horaria



zona horaria para hotmail (1)

Tengo problemas para encontrar una manera de analizar la zona horaria de cadenas como las siguientes: "Jue, 1 de septiembre de 2011 09:06:03 -0400 (EDT)"

Lo que tengo que hacer en el esquema más grande de mi programa es tomar un char * y convertirlo a time_t. El siguiente es un programa de prueba simple que escribí para tratar de averiguar si strptime era responsable de la zona horaria, y no parece ser así (cuando este programa de prueba ejecuta todos los números impresos son iguales cuando deberían diferir). Sugerencias?

También traté de utilizar GNU getdate y getdate_r, porque parece una mejor opción para formatos posiblemente flexibles, pero recibí una advertencia de "declaración de función implícita" del compilador, lo que implicaba que no estaba incluyendo las bibliotecas correctas. ¿Hay algo más que debería estar #incluyendo para usar getdate?

#include <string.h> #include <stdlib.h> #include <strings.h> #include <stdio.h> #ifndef __USE_XOPEN #define __USE_XOPEN #endif #include <time.h> int main (int argc, char** argv){ char *timestr1, *timestr2, *timestr3; struct tm time1, time2, time3; time_t timestamp1, timestamp2, timestamp3; timestr1 = "Thu, 1 Sep 2011 09:06:03 -0400 (EDT)"; // -4, and with timezone name timestr2 = "Thu, 1 Sep 2011 09:06:03 -0000"; // -0 strptime(timestr1, "%a, %d %b %Y %H:%M:%S %Z", &time1); //includes UTC offset strptime(timestr2, "%a, %d %b %Y %H:%M:%S %Z", &time2); //different UTC offset strptime(timestr1, "%a, %d %b %Y %H:%M:%S", &time3); //ignores UTC offset time1.tm_isdst = -1; timestamp1 = mktime(&time1); time2.tm_isdst = -1; timestamp2 = mktime(&time2); time3.tm_isdst = -1; timestamp3 = mktime(&time3); printf("Hello /n"); printf("%d/n%d/n%d/n", timestamp1, timestamp2, timestamp3); printf("Check the numbers /n"); return 0; }


En MacOS X (10.7.1), uno de los ''errores'' enumerados en la página de manual de strptime(3) es:

El especificador de formato% Z solo acepta abreviaturas de zonas horarias locales o el valor "GMT". Esta limitación se debe a la ambigüedad debido a la sobrecarga de las abreviaturas de zona horaria. Un ejemplo de esto es EST, que es el horario estándar del este y el horario de verano del este de Australia.

Hace algún tiempo, escribí un par de comandos: marca de tiempo (mayo de 1989 para la revisión 1.1) y strptime (julio de 2007 para la revisión 1.1). Estas son cubiertas relativamente delgadas sobre las strftime() y strptime() .

Al ejecutarlos en MacOS X, obtengo:

$ strptime -T ''%Y-%m-%dT%H:%M:%S %Z'' 2011-09-08T21:00:00PDT 1315540800 = 2011-09-08T21:00:00PDT $ timestamp 1315540800 1315540800 = Thu Sep 08 21:00:00 2011 $ timestamp -u 1315540800 1315540800 = Fri Sep 09 04:00:00 2011 $ strptime -T ''%Y-%m-%dT%H:%M:%S %Z'' 2011-09-08T21:00:00GMT 1315515600 = 2011-09-08T21:00:00GMT $ timestamp 1315515600 1315515600 = Thu Sep 08 14:00:00 2011 $ timestamp -T ''%Y-%m-%dT%H:%M:%S %z'' 1315515600 1315515600 = 2011-09-08T14:00:00 -0700 $

Estoy en EE. UU./Pacífico (o América / Los_Angeles, o horario de verano del Pacífico; UTC-07: 00), así que lo que muestran estos comandos es que (como dice la página del manual), strptime() reconoce PDT y GMT y da la información adecuada respuestas para cada uno La opción -u de la timestamp de timestamp indica "imprimir hora UTC (también conocida como GMT)" en lugar de la hora local. Y a las 9 p. M. En UTC es de hecho a las 2 p.m. en PDT.

Contáctame si quieres la fuente - mira mi perfil.