$ date --version
date (GNU coreutils) 8.25
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by David MacKenzie.
当前日期为美国东部夏令时间 (EDT)。
$ date
Tue Oct 27 21:16:35 EDT 2020
现在尝试转换为 UTC,即 +4。
$ env TZ=UTC date -d "21:07:28 EDT"
Thu Oct 29 01:07:28 UTC 2020
$ env TZ=Etc/UTC date --date='TZ="America/New_York" 21:07:28'
Thu Oct 29 01:07:28 UTC 2020
为什么是 10 月 29 日?应该是 10 月 28 日。
我完全被这个难住了。
谢谢你的帮助。
答案1
-d
如果您只为选项提供时间date
,它会将其解释为今天日期提供的时间。考虑到这一点,让我们看一下您的示例:
$ env TZ=UTC date -d "21:07:28 EDT"
Thu Oct 29 01:07:28 UTC 2020
你告诉日期打印出 21:07:28 EDT 的字符串表示形式当前日期。您还可以设置TZ=UTC
。 TZ
不仅用于格式化时间,还用于确定当前日期。
当您运行该命令时,UTC 时间约为 10 月 28 日凌晨 1 点。因此,您的日期命令将转换为“在 10 月 28 日 21:07:28 EDT 时打印 UTC 时间”。由于 UTC 比 EDT 早四个小时,因此它会打印 10 月 29 日 01:07:28。
如果您希望它在 指定的时区中使用除“今天”以外的其他日期$TZ
,则必须明确说明。例如,
TZ=UTC date -d "Oct 27 21:07:28 EDT"
或者您可以第二次调用 date 命令来生成您当地时区的今天的日期:
TZ=UTC date -d "$(date +%F) 21:07:28 EDT"
TZ
请注意,在调用 date 进行命令替换 (部分) 时,您的 shell 不会设置$(date +%F)
。这就是为什么内部date
会为您提供本地时区的日期。