web-dev-qa-db-ja.com

時間をエポック時間に変換する方法は?

時間、分、日、秒、月、年などを知っている特定の瞬間があるとします。このエポック時間(1970年からの秒数)をどのように変換できますか?

Boostは使用できないので、Boostソリューションを提案しないでください。

15
user788171

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
24
Adam Rosenfield

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);
5
Laurent Winkler

mktime()は、struct tmを秒に変換できます-Epoch以降。

1
chrisaycock

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);
0
ericcurtin