- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我看到了很多不同的观点,所以想在这里问问。
我阅读了man mktime
:
(A positive or zero value for tm_isdst causes mktime() to presume initially
that summer time (for example, Daylight Saving Time) is or is not in
effect for the specified time, respectively. A negative value for
tm_isdst causes the mktime() function to attempt to divine whether summer
time is in effect for the specified time.
我的问题是,不应该将 tm_isdst
保留为 -1
让系统决定它是否是 dst,这样代码就变得与 dst 无关?
我错过了什么吗?
最佳答案
如果可能,您应该避免将 tm_isdst 设置为 -1。系统不能始终仅从日期和时间确定 DST 状态。夏令时结束前后的小时是不明确的。例如,如果您传递 mktime()
1:30 AM November 4, 2012,则该信息不足以从 mktime()< 获取正确的
。通常我已经看到 time_t
值mktime()
在模棱两可的情况下假定标准时间,但我没有看到任何文档可以保证所有平台上的行为。 2012 年 11 月 4 日凌晨 1:30 使用 tm_isdst == 1
将早于 1 小时,因为 1:00:00 到 1:59:59 重复。
#include <stdio.h>
#include <time.h>
int main()
{
time_t daylight, standard;
struct tm timestr;
double diff;
timestr.tm_year = 2012 - 1900;
timestr.tm_mon = 11 - 1;
timestr.tm_mday = 4;
timestr.tm_hour = 1;
timestr.tm_min = 30;
timestr.tm_sec = 0;
/* first with standard time */
timestr.tm_isdst = 0;
standard = mktime(×tr);
/* now with daylight time */
timestr.tm_isdst = 1;
daylight = mktime(×tr);
diff = difftime(standard, daylight);
printf("Difference is %f hour(s)", diff/60.0/60.0);
return 0;
}
这会产生:
Difference is 1.000000 hour(s)
两者都是 2012 年 11 月 4 日凌晨 1:30,但两者都是两个不同的 time_t 值,相隔 1 小时。
mktime()
基本上有 2 个输出:
时间结构既是输入又是输出。它由 mktime()
修改以将所有结构成员返回到标称范围。例如,如果您增加 tm_hour 成员 += 500
,这意味着将时间增加 500 小时。 tm_hour
成员将更改为值 00 到 23,tm_day
、tm_mday
等都将相应调整。 tm_isdst
也是输入和输出。它的值如下:
因此 mktime() 将为 tm_isdst 输出 1 或 0,绝不会输出 -1。
-1 是一个可能的输入,但我认为它的意思是“未知”。不要认为它是“自动确定”的意思,因为一般情况下,mktime()
不能总是自动确定。
明确的 DST 状态(0 或 1)应该来自软件外部的某些东西,例如将其存储在文件或数据库中,或者提示用户。
关于c - mktime 和 tm_isdst,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8558919/
当我运行该线路时 time.strptime("2012-06-01 12:00:00 "+time.strftime("%Z"), "%Y-%m-%d %H:%M:%S %Z") 它为我创建了一个结
我正在使用 strptime 来解析具有以下格式化程序的用户日期输入字符串:%F %T %z 用于格式 YYYY-MM-DD HH:MM:SS +- UTC 偏移量。我想添加一个选项,以便用户可以指定
我看到了很多不同的观点,所以想在这里问问。 我阅读了man mktime: (A positive or zero value for tm_isdst causes mktime() to pre
我对 tm 结构中 tm_isdst 标志的使用有以下疑问。根据手册页和谷歌搜索结果,我知道它的值解释如下 一个。值 0 表示 DST 在表示的时间内无效 B.值为 1 表示 DST 生效 C.值 -
我是 Python 的初学者。我有一个脚本,我想在其中检查东部时区当前是否处于夏令时: import sys import os import time os.environ['TZ'] = 'Ame
另一个关于mktime和DST的问题 Linux、Ubuntu,时区设置为欧洲/柏林,即当前时间为 CEST: >date Mon Aug 22 16:08:10 CEST 2016 >date --
我有一个在莫斯科时区配置的系统。莫斯科在每年三月的最后一个星期日进入夏令时。莫斯科夏令时 (MSD) 为 UTC +4 小时。在 10 月的最后一个星期日,夏令时结束,回到莫斯科标准时间 (MSK),
我是一名优秀的程序员,十分优秀!