C ++ Как я могу преобразовать дату в формате год-месяц-день в формат эпохи Unix? - PullRequest
2 голосов
/ 23 октября 2010

Мне нужно преобразовать данную дату в целое число, содержащее количество миллисекунд с 1 января 1970 года. (Эпоха unix)

Я попробовал следующий код:

tm lDate;

lDate.tm_sec = 0;  
lDate.tm_min = 0;  
lDate.tm_hour = 0;  
lDate.tm_mday = 1;  
lDate.tm_mon = 10;  
lDate.tm_year = 2010 - 1900;  

time_t lTimeEpoch = mktime(&lDate);

cout << "Epoch: " << lTimeEpoch << endl;

Результат - Epoch: 1288584000, что соответствует понедельнику, 01 ноября 2010 года, 04:00:00 по Гринвичу

Редактировать: я ожидал 01 октября 2010 года, по-видимому, tm_mon - это количество месяцев с января, поэтому правильной строкой будет lDate.tm_mon = 10 -1;

Ответы [ 2 ]

2 голосов
/ 23 октября 2010

Как указано в справочной странице, tm_mon: Количество месяцев с января в диапазоне от 0 до 11.

0 голосов
/ 23 октября 2010

Вероятно, вас смущают часовые пояса.Я думаю, что вы пропустили это со страницы руководства:

Функция mktime() преобразует разбитую структуру времени, выраженную как местное время ...

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