Подтвердить что ты не робот

Как преобразовать время в эпоху?

Скажем, у меня есть определенный момент времени, когда я знаю час, минута, день, второй, месяц, год и т.д.; как я могу преобразовать это время эпохи (секунды с 1970 года)?

Я не могу использовать Boost, поэтому, пожалуйста, не предлагайте решение Boost.

4b9b3361

Ответ 1

Используйте функцию mktime(3). Например:

struct tm t = {0};  // Initalize to all 0's
t.tm_year = 112;  // This is year-1900, so 112 = 2012
t.tm_mon = 8;
t.tm_mday = 15;
t.tm_hour = 21;
t.tm_min = 54;
t.tm_sec = 13;
time_t timeSinceEpoch = mktime(&t);
// Result: 1347764053

Ответ 2

В Linux используйте timegm, чтобы избежать вычитания вашего локального часового пояса:

struct tm tm;

// set tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min and tm.tm_sec

tm.tm_year -= 1900; // year start at 1900
tm.tm_mon--;        // months start at january
TIME_STAMP t = timegm(&tm);

Ответ 3

mktime() может преобразовать struct tm в секунды-с-Epoch.

Ответ 4

mktime и memset наиболее переносимы для меня:

struct tm t;
memset(&t, 0, sizeof(tm)); // Initalize to all 0's
t.tm_year = 112; // This is year-1900, so 112 = 2012
t.tm_mon = 8;
t.tm_mday = 15;
t.tm_hour = 21;
t.tm_min = 54;
t.tm_sec = 13;
time_t time_since_epoch = mktime(&t);

Ответ 5

если я использую твой код, я получу секунды с эпохи -738232443 вместо 1347764053. Что происходит? Я пишу код не на c++, но я думаю, что это не может быть причиной. Спасибо