据我所知,美国东部时间是东部标准时间的 GMT-5 和东部夏令时间的 GMT-4。
那么为什么这两个命令在答案中给出不同的时间呢?
laptop % TZ=EST5EDT date
Wed Apr 27 12:16:36 EDT 2022
laptop % TZ=GMT-4 date
Wed Apr 27 20:16:40 GMT 2022
他们不应该是一样的吗?
我的系统时区是亚洲/德黑兰,它在夏季(春季向前)调整夏令时,在冬季调整;但是我确实需要禁用这些 DST 调整并将时区始终保持在 UTC+3:30。我如何在 Linux 中做到这一点?
我碰巧在at
昨天凌晨 2 点 40 分左右闲逛。(不要问...)我尝试在未来一分钟安排活动(作为测试),但 - 它只是没有发生。事件都在队列中,但他们只是在 2 点 41 分的时候呆在那里,没有任何事情发生。我放弃了,去睡觉了。
发生了什么事?好吧 - 事实证明今天夏令时在挪威结束(夏令时),所以今晚确实发生了两次 2:41!果然,在第二个(即从夏季时间看到的 3:41),at
然后启动了那些预定的事件。
这是如何运作的?调度为什么以及如何知道时间变化,并选择第二次,而不是在时间超过指定时间时才这样做?
为了解决我正在处理的软件项目中与特定时区相关的错误,我正在尝试复制系统时钟上的更改,timedatectl
以检查我的软件行为。
我试图通过运行来实现
timedatectl set-timezone America/New_York
timedatectl set-local-rtc 1
timedatectl set-ntp false
timedatectl set-time "2017-03-12 01:58:50" && hwclock -w
当我这样做并立即运行时timedatectl
,我会得到预期的以下时间:
Local time: Sun 2017-03-12 01:58:51 EST
Universal time: Sun 2017-03-12 06:58:51 UTC
RTC time: Sun 2017-03-12 01:58:51
Time zone: America/New_York (EST, -0500)
System clock synchronized: no
systemd-timesyncd.service active: no
RTC in local TZ: yes
但是,在此之后 10 秒,当分钟更改(变为xx:59
)时,本地时间和通用时间会“重新启动”到当前时间
Local time: Wed 2019-08-07 21:01:41 EDT
Universal time: Thu 2019-08-08 01:01:41 UTC
RTC time: Sun 2017-03-12 01:58:57
Time zone: America/New_York (EDT, -0400)
System clock synchronized: no
systemd-timesyncd.service active: no
RTC in local TZ: yes
我在这里想念什么?
我的设置是 Vagrant Ubuntu 18 VM (Linux vagrant 4.15.0-51 / vm box "bento/ubuntu-18.04")。
为什么我不能将时区更改为 CET 或 Europe/Berlin
[[email protected] ~]# docker run -ti --rm debian:stretch bash
root@b65a4b63c152:/# cat /etc/timezone
Etc/UTC
root@b65a4b63c152:/# echo 'Europe/Berlin' > /etc/timezone
root@b65a4b63c152:/# cat /etc/timezone
Europe/Berlin
root@b65a4b63c152:/# dpkg-reconfigure -f noninteractive tzdata
Current default time zone: 'Etc/UTC'
Local time is now: Fri Mar 1 10:31:46 UTC 2019.
Universal Time is now: Fri Mar 1 10:31:46 UTC 2019.
root@b65a4b63c152:/# ls -l /usr/share/zoneinfo/Europe/Berlin
-rw-r--r-- 1 root root 2335 Dec 31 09:43 /usr/share/zoneinfo/Europe/Berlin
root@b65a4b63c152:/# echo $TZ
root@b65a4b63c152:/# date '+%Z %z'
UTC +0000
root@b65a4b63c152:/# cat /etc/timezone
Etc/UTC
巴西政府刚刚颁布了一项法律,将巴西 DST(夏令时)的开始时间在当地称为夏令时。
这个新的 DST 日期将在下个月生效,更准确地说是 2018 年 11 月 18 日。所以,我们没有足够的时间通过操作系统更新等待新的 Olson 更新,也没有下载新的Olson 数据库包可能就足够了。
我已经tzdb-2018e.tar.tz
从https://www.iana.org/time-zones下载了文件。在该包中,我找到了该文件southamerica
,并且找到了以下条目:
...
# From Steffen Thorsen (2017-12-18):
# According to many media sources, next year's DST start in Brazil will move to
# the first Sunday of November, and it will stay like that for the years after.
# ... https://www.timeanddate.com/news/time/brazil-delays-dst-2018.html
# From Steffen Thorsen (2017-12-20):
# http://www.planalto.gov.br/ccivil_03/_ato2015-2018/2017/decreto/D9242.htm
Rule Brazil 2018 max - Nov Sun>=1 0:00 1:00 -
Rule Brazil 2023 only - Feb Sun>=22 0:00 0 -
...
2018 年进入规则之前的评论与 2017 年底的旧法律相匹配,但有一项新法律将其更改为 2018 年 11 月的第三个星期日。
如何修复奥尔森条目将其转移到 11 月的第三个星期日?我已经尝试过Sun>=3
了,它没有工作。