時間、分、日、秒、月、年などを知っている特定の瞬間があるとします。このエポック時間(1970年からの秒数)をどのように変換できますか?
Boostは使用できないので、Boostソリューションを提案しないでください。
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
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);
mktime()
は、struct tm
を秒に変換できます-Epoch以降。
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);