2010-04-08 2 views
0

указываете ей Пожалуйста, смотрите код ниже:Отметка проблема с МестноеВремя и

#include <iostream> 
#include <stdlib.h> 
#include <time.h> 

using namespace std; 

int main(void) 
{ 
     time_t current_time = 1270715952; 
     cout << "Subscriber current timestamp:" << current_time << endl; 
     tm* currentTm = localtime(&current_time); 
     char tmp_str[256]; 
     //2010-04-08T11:39:12 
     snprintf(tmp_str, 
     sizeof(tmp_str), 
     "%04d%02d%02d%02d%02d%02d.000", 
     currentTm->tm_year+1900, 
     currentTm->tm_mon+1, 
     currentTm->tm_mday, 
     currentTm->tm_hour, 
     currentTm->tm_min, 
     currentTm->tm_sec); 
     cout << "Subscriber current date:" << tmp_str << endl; 
     tm tmpDateScheduleFrom, tmpDateScheduleTo; 
     memset(&tmpDateScheduleFrom, 0, sizeof(tm)); 
     memset(&tmpDateScheduleTo, 0, sizeof(tm)); 
     //2010-04-08T11:00 
     tmpDateScheduleFrom.tm_sec = 0; 
     tmpDateScheduleFrom.tm_min = 0; 
     tmpDateScheduleFrom.tm_hour = 11; 
     tmpDateScheduleFrom.tm_mday = 8; 
     tmpDateScheduleFrom.tm_mon = 3; 
     tmpDateScheduleFrom.tm_year = 110; 
     //2010-04-08T12:00 
     tmpDateScheduleTo.tm_sec = 0; 
     tmpDateScheduleTo.tm_min = 0; 
     tmpDateScheduleTo.tm_hour = 12; 
     tmpDateScheduleTo.tm_mday = 8; 
     tmpDateScheduleTo.tm_mon = 3; 
     tmpDateScheduleTo.tm_year = 110; 
     time_t localFrom = mktime(&tmpDateScheduleFrom); 
     time_t localTo  = mktime(&tmpDateScheduleTo); 
     cout << "Subscriber current timestamp:" << current_time << endl; 
     cout << "Subscriber localFrom:" << localFrom << endl; 
     cout << "Subscriber localTo:" << localTo << endl; 
     return 0; 
} 

Результаты следующие:

Subscriber current timestamp:1270715952 
Subscriber current date:20100408113912.000 
Subscriber current timestamp:1270715952 
Subscriber localFrom:1270717200 
Subscriber localTo:1270720800 

Почему текущий подписчик метка времени (дата и время абонент: 2010-04- 08T11: 39: 12) не находится между диапазоном localFrom (временная метка даты/времени: 2010-04-08T11: 00: 00) и LocalTo (временная метка даты/времени: 2010-04-08T12: 00: 00)?

ответ

1

Я думаю, что проблема в том, что вы установили tm_isdst в 0, что означает no DST, однако localtime() использует настройку DST общесистемной.

Если вы установили tm_isdst в 1, все должно быть в порядке. Согласно man mktime, вы можете установить отрицательное значение для tm_isdst, если вы не уверены в этом. man не говорит об этом явно, но я думаю, что в этом случае mktime() также будет использовать системные настройки, как и localtime().

+1

Если вы установили 'tm_isdst' в 1, это будет нормально, пока DST не изменится снова, а затем перейдет в противоположном направлении. Как вы указали, используйте -1, чтобы система автоматически вычислила соответствующее значение для isdst. –

Смежные вопросы