簡體   English   中英

將struct tm轉換為time_t

[英]Convert struct tm to time_t

我有以下代碼:

struct tm time;

strptime("27052010", "%d%m%Y", &time);

cout << "sec: " << time.tm_sec << "\n";
cout << "min: " << time.tm_min << "\n";
cout << "hour: " << time.tm_hour << "\n";
cout << "day: " << time.tm_mday << "\n";
cout << "month: " << (time.tm_mon + 1) << "\n";
cout << "year: " << time.tm_year << "\n";

time_t t = mktime(&time);

cout << "sec: " << time.tm_sec << "\n";
cout << "min: " << time.tm_min << "\n";
cout << "hour: " << time.tm_hour << "\n";
cout << "day: " << time.tm_mday << "\n";
cout << "month: " << (time.tm_mon + 1) << "\n";
cout << "year: " << time.tm_year << "\n";

cout << "time: " << t << "\n";

輸出是:

sec: 1474116832
min: 32767
hour: 4238231
day: 27
month: 5
year: 110

sec: 52
min: 0
hour: 6
day: 2
month: 9
year: 640
time: 18008625652 (Fri, 02 Sep 2540 04:00:52 GMT)

我的問題是為什么mktime()改變time值以及為什么轉換的time_t不等於我的輸入日期。 我希望輸出是自1970年以來以秒為單位表示的日期(2010年5月27日= 1330905600)。

提前致謝

mktime在轉換為time_t之前規范化其所有參數。 你有小時,分鍾和秒的巨大價值,所以這些都被轉換成適當的天數,將價值推向了未來。

在調用mktime之前,您需要將tm的其他重要屬性(包括小時/分鍾/秒)清零。 正如評論中所述,只需將其初始化為零: tm time = {0}; (標記為C ++,因此不需要前導struct )。 另請注意,您可能希望將tm_isdst設置為-1,以便它嘗試確定夏令時值而不是假定不是DST(如果初始化為零)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM