使用“date”转换不同时区的日期
Converting date in a different timezone with `date`
我正在尝试使用 UNIX date
转换来自不同时区的日期(我在 Ubuntu 20.04)。
当前日期,效果很好:
$ date
dim. 12 déc. 2021 11:59:16 CET
$ TZ=Pacific/Tahiti date
dim. 12 déc. 2021 00:59:32 -10
但是当我处理一个字符串时,它失败了:
$ export testdate="2021/10/28 17:47:26"
$ date -d "$test"
jeu. 28 oct. 2021 17:47:26 CEST
$ TZ=Pacific/Tahiti date -d "$test"
jeu. 28 oct. 2021 17:47:26 -10
如我所料:
jeu 28 oct. 2021 05:47:26 -10
我不明白为什么我没有得到正确的班次。当然,如果我尝试使用日期也应该更改的日期和时间,它也不起作用:
$ export test="2021/10/28 7:47:26"
$ date -d "$test"
jeu. 28 oct. 2021 07:47:26 CEST
$ TZ=Pacific/Tahiti date -d "$test" "+%F %T %Z"
2021-10-28 07:47:26 -10
在我期待的时候:
mer 27 oct. 2021 19:47:26 -10
我不是很自信,但我的印象是您正在寻找以下语法:
LC_TIME="es_ES.UTF8" TZ="America/New_York" date --date='TZ="Europe/Amsterdam" 2021/10/28 17:47:26' "+%A %F %T %B"
采用预定义的日期时间(解释为 Amsterdam
的本地时间),同时将日期时间(基于时差)调整为 New York
时间;然后它用 months/weekdays 的西班牙语名称打印结果(前提是您的系统上存在该语言的区域设置)。
一个简单的方法是先将时间转换为纪元时间:
test="2021/10/28 17:47:26"
TZ=Pacific/Tahiti date -d @$(date -d "$test" +%s)
date -d "$test" +%s
将本地时间转换为纪元时间。
TZ=Pacific/Tahiti date -d @$(date -d "$test" +%s)
从纪元时间打印大溪地时间。
why I don't get the proper shift
test="2021/10/28 17:47:26"
是未知时区的日期。没有人知道它在哪个时区,白天是什么时候。 GNU date 试图“猜测”你的意思是什么偏移量,它通常遍历当前时区的 TZ 数据库并只选择匹配的第一个偏移量。此外,指定时区不足以知道现在是什么时候,您必须具体。
此外,由于夏令时,您可以及时“返回”时间,现在即使您知道时区,也可以知道 UTC 的偏移量。
此外,您不必导出它 - 日期不关心 test
环境变量。
Converting date in a different timezone with date
如果输入的是 UTC,请告诉日期。
$ LC_ALL=C TZ=Pacific/Tahiti date -d "2021/10/28 17:47:26 UTC"
Thu Oct 28 07:47:26 -10 2021
如果输入有任何其他偏移量,请告诉日期。
$ LC_ALL=C TZ=Pacific/Tahiti date -d "2021/10/28 17:47:26 CEST"
Thu Oct 28 05:47:26 -10 2021
输入格式的GNU日期解析一般是个谜。文档将 2004-02-29 16:21:42
格式列为示例输入,因此我推荐该格式。如果你想要准确,我推荐 strptime
来自 dateutils
(或真正的编程语言)。
我正在尝试使用 UNIX date
转换来自不同时区的日期(我在 Ubuntu 20.04)。
当前日期,效果很好:
$ date
dim. 12 déc. 2021 11:59:16 CET
$ TZ=Pacific/Tahiti date
dim. 12 déc. 2021 00:59:32 -10
但是当我处理一个字符串时,它失败了:
$ export testdate="2021/10/28 17:47:26"
$ date -d "$test"
jeu. 28 oct. 2021 17:47:26 CEST
$ TZ=Pacific/Tahiti date -d "$test"
jeu. 28 oct. 2021 17:47:26 -10
如我所料:
jeu 28 oct. 2021 05:47:26 -10
我不明白为什么我没有得到正确的班次。当然,如果我尝试使用日期也应该更改的日期和时间,它也不起作用:
$ export test="2021/10/28 7:47:26"
$ date -d "$test"
jeu. 28 oct. 2021 07:47:26 CEST
$ TZ=Pacific/Tahiti date -d "$test" "+%F %T %Z"
2021-10-28 07:47:26 -10
在我期待的时候:
mer 27 oct. 2021 19:47:26 -10
我不是很自信,但我的印象是您正在寻找以下语法:
LC_TIME="es_ES.UTF8" TZ="America/New_York" date --date='TZ="Europe/Amsterdam" 2021/10/28 17:47:26' "+%A %F %T %B"
采用预定义的日期时间(解释为 Amsterdam
的本地时间),同时将日期时间(基于时差)调整为 New York
时间;然后它用 months/weekdays 的西班牙语名称打印结果(前提是您的系统上存在该语言的区域设置)。
一个简单的方法是先将时间转换为纪元时间:
test="2021/10/28 17:47:26"
TZ=Pacific/Tahiti date -d @$(date -d "$test" +%s)
date -d "$test" +%s
将本地时间转换为纪元时间。
TZ=Pacific/Tahiti date -d @$(date -d "$test" +%s)
从纪元时间打印大溪地时间。
why I don't get the proper shift
test="2021/10/28 17:47:26"
是未知时区的日期。没有人知道它在哪个时区,白天是什么时候。 GNU date 试图“猜测”你的意思是什么偏移量,它通常遍历当前时区的 TZ 数据库并只选择匹配的第一个偏移量。此外,指定时区不足以知道现在是什么时候,您必须具体。
此外,由于夏令时,您可以及时“返回”时间,现在即使您知道时区,也可以知道 UTC 的偏移量。
此外,您不必导出它 - 日期不关心 test
环境变量。
Converting date in a different timezone with
date
如果输入的是 UTC,请告诉日期。
$ LC_ALL=C TZ=Pacific/Tahiti date -d "2021/10/28 17:47:26 UTC"
Thu Oct 28 07:47:26 -10 2021
如果输入有任何其他偏移量,请告诉日期。
$ LC_ALL=C TZ=Pacific/Tahiti date -d "2021/10/28 17:47:26 CEST"
Thu Oct 28 05:47:26 -10 2021
输入格式的GNU日期解析一般是个谜。文档将 2004-02-29 16:21:42
格式列为示例输入,因此我推荐该格式。如果你想要准确,我推荐 strptime
来自 dateutils
(或真正的编程语言)。