Strptime в C с компенсациями часового пояса

У меня проблемы с поиском пути Разбирайте часовую точку из строк, как следующее: "Чт, 1 сен 2011 09:06:03 -0400 (EDT)"

Что мне нужно сделать в большей схеме моей программы, предпримет в Char * и преобразовать его в Time_t. Ниже приведена простая тестовая программа, которую я писал, чтобы попытаться понять, если STRPTIME вообще будет учитывать часовой пояс, и он не может быть (когда эта программа тестирования выполняет все напечатанные номера, одинаковы, когда они должны отличаться). Предложения?

Я также пытался использовать GNU GetDate и getDate_r, потому что это выглядит как лучший вариант для возможно гибких форматов, но получил предупреждение «Неявное объявление функции», предупреждение от компилятора, подразумевая, что я не был включен в правильные библиотеки. Есть ли что-то еще, что я должен быть # включает в себя, чтобы использовать 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;
}
5
задан VMills 7 September 2011 в 14:29
поделиться