因此mktime()返回一个time_t值,该值定义为"表示自UTC时间1970年1月1日00:00起经过的秒数的整数值"(来源).我可以使用将日期转换为time_t值mktime().例如,要将日期10-Sep-2017 08:34:56转换为time_t我要执行以下操作:
struct tm tm;
time_t tv;
tm.tm_sec = 56;
tm.tm_min = 34;
tm.tm_hour = 8;
tm.tm_mday = 10;
tm.tm_mon = 8;
tm.tm_year = 117;
tm.tm_isdst = ????;
tv = mktime(&tm);
Run Code Online (Sandbox Code Playgroud)
现在我不明白的是tm_isdst参数背后的想法:它被描述为"一个标志,指示夏令时是否在所描述的时间生效"(来源).
这个描述有点令我感到困惑,因为我认为我所描述的时间struct tm实际上已经是UTC时间,time_t我想要的价值mktime()也是UTC.但是UTC时间不会随着季节的变化而变化,那么为什么mktime()需要费心去节省夏令时呢?使用UTC而不是本地时间的优势不是我不必为夏令时烦恼吗?那么我为什么要设置tm_isdst呢?
我确定答案很简单,但目前我没有看到它.有人可以提供一个简单的例子,说明为什么mktime()需要tm_isdst参数将某个日期和时间转换为time_t值?
DST是否有效地改变了纪元时间,因为mktime使用当前时区来确定时间.
例如,如果我填充tm1/1/70 00:00:00,如下所示:
tm.tm_sec = 0;
tm.tm_min = 0;
tm.tm_hour = 0;
tm.tm_mday = 1;
tm.tm_mon = 0;
tm.tm_year = 70;
tm.tm_isdst = 0;
Run Code Online (Sandbox Code Playgroud)
我的值为18000 tv因为我的时区是GMT-5(18000 = 3600*5).如果我将值更改tm_isdst为1,tv则将设置为14400(3600*4).
设置tm_isdst为-1将查看本地时区数据库,以查看DST是否对给定的日期/时间有效.
| 归档时间: |
|
| 查看次数: |
256 次 |
| 最近记录: |