преобразование времени строки в секунды - PullRequest
2 голосов
/ 25 февраля 2011

Это код, в который я преобразовываю строковое время в формат даты и времени и в секунды, но он отображает какое-то странное значение.Пожалуйста, помогите мне

Код:

struct tm tm;
time_t t;
char s[25]="Sat Feb 19 12:53:39 2011";
if (strptime(s, "%A %b %d %H:%M:%S %Y", &tm) != NULL)


printf("year: %d; month: %d; day: %d;\n", tm.tm_year, tm.tm_mon, tm.tm_mday);
printf("hour: %d; minute: %d; second: %d\n",  tm.tm_hour, tm.tm_min, tm.tm_sec);
printf("week day: %d; year day: %d\n", tm.tm_wday, tm.tm_yday);

tm.tm_isdst = -1;      
t = mktime(&tm);
printf("seconds since the Epoch: %ld\n", (long) t);

Выход -

Год: 111;месяц: 1;день: 19;

час: 12;минута: 53;второй: 40

день недели: 6;день года: 49

секунд с начала эпохи: 1298102020

Ответы [ 5 ]

2 голосов
/ 25 февраля 2011

С http://en.wikipedia.org/wiki/Time.h:

Календарное время (также известное как «разбитое время») в стандартной библиотеке C представлено как структура struct tm, состоящая из следующих членов:

Member  Description
int tm_hour hour (0 – 23)
int tm_isdst    Daylight saving time enabled (> 0), disabled (= 0), or unknown (< 0)
int tm_mday day of the month (1 – 31)
int tm_min  minutes (0 – 59)
int tm_mon  month (0 – 11, 0 = January)
int tm_sec  seconds (0 – 60, 60 = Leap second)
int tm_wday day of the week (0 – 6, 0 = Sunday)
int tm_yday day of the year (0 – 365)
int tm_year year since 1900

т.е. вам нужно добавить 1900 к году, а месяцы начинаются с нуля.

1 голос
/ 25 февраля 2011

Вы должны добавить 1900 к tm.tm_year.

0 голосов
/ 25 февраля 2011
struct tm tm;
time_t t;
char s[25]="Sat Feb 19 12:53:39 2011";
if (strptime(s, "%A %b %d %H:%M:%S %Y", &tm) != NULL)

/* Don't do: tm.tm_year += 1900; 
   before computing the Epoch or you'll break it! 
*/

printf("year: %d; month: %d; day: %d;\n", tm.tm_year + 1900, tm.tm_mon, tm.tm_mday);
printf("hour: %d; minute: %d; second: %d\n",  tm.tm_hour, tm.tm_min, tm.tm_sec);
printf("week day: %d; year day: %d\n", tm.tm_wday, tm.tm_yday);

tm.tm_isdst = -1;      
t = mktime(&tm);
printf("seconds since the Epoch: %ld\n", (long) t); 
0 голосов
/ 25 февраля 2011

Вывод правильный.struct tm сохраняет время следующим образом:

Member         Meaning            Range 
tm_sec   seconds after the minute  0-61* 
tm_min   minutes after the hour    0-59 
tm_hour  hours since midnight      0-23 
tm_mday  day of the month          1-31 
tm_mon   months since January      0-11 
tm_year  years since 1900  
tm_wday  days since Sunday         0-6 
tm_yday  days since January 1      0-365 
tm_isdst Daylight Saving Time flag 

Источник

0 голосов
/ 25 февраля 2011

tm.tm_year - номер года с 1900 года. А месяц 0 - январь. Просто настройте для этого по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...