上周末,西欧大部分地区推迟了一小时——出现了两起2017-10-29T02:00
。
要将时间转换为 UTC,我可以使用 GNU 日期:
$ date -d 'TZ="Europe/Rome" 2017-10-29 02:00'
Sun Oct 29 01:00:00 UTC 2017
这将返回 CET 时间(即第二个凌晨 2 点)。我如何date
返回Sun Oct 29 00:00:00 UTC 2017
(凌晨 2 点 - CEST)?
信息:
$ date --version
date (GNU coreutils) 8.21
答案1
时区更改的参考是zdump
:
$ /usr/sbin/zdump -v -c 2017,2018 Europe/Rome
Europe/Rome -9223372036854775808 = NULL
Europe/Rome -9223372036854689408 = NULL
Europe/Rome Sun Mar 26 00:59:59 2017 UTC = Sun Mar 26 01:59:59 2017 CET isdst=0
Europe/Rome Sun Mar 26 01:00:00 2017 UTC = Sun Mar 26 03:00:00 2017 CEST isdst=1
Europe/Rome Sun Oct 29 00:59:59 2017 UTC = Sun Oct 29 02:59:59 2017 CEST isdst=1
Europe/Rome Sun Oct 29 01:00:00 2017 UTC = Sun Oct 29 02:00:00 2017 CET isdst=0
Europe/Rome 9223372036854689407 = NULL
Europe/Rome 9223372036854775807 = NULL
答案2
该时间TZ="Europe/Rome" 2017-10-29 02:00
不明确,因为这会转换为两个不同的 UTC 时间,00:00
并且01:00
。
如何使日期同时返回是指定确切的时区本身,例如
$ date -ud 'TZ="Europe/Rome" 02:00:00 10/29/2017 CEST'
Sun Oct 29 00:00:00 UTC 2017
$ date -ud 'TZ="Europe/Rome" 02:00:00 10/29/2017 CET'
Sun Oct 29 01:00:00 UTC 2017
然而,这意味着您必须在 date 命令之外计算出时区。