如何解决Linux date命令自动为每个日期时间增加10小时
如果我输入date +"%Y/%m/%d %H:%M" -d "20200819T1234"
,当我实际得到2020/08/19 12:34
时,预期的输出为2020/08/19 02:34
,即少了10小时。有人可以向我解释为什么会这样吗?
目前,我在命令末尾使用+ 10 hours
进行管理,但我认为这不正常。服务器上设置的时区为-03
,所以我很困惑。
在Ubuntu 16和Debian 10中都会发生这种情况
解决方法
您的格式与时间字符串不匹配:请尝试
date +"%Y/%m/%d %H:%M" -d "2020/08/19 12:34"
2020/08/19 12:34
,用于解析日期(parse_datetime2
)的GNU代码中嵌入了此表,该表提供了获取错误时间的原因(为简洁起见进行了修剪):
/* Military time zone table.
Note 'T' is a special case,as it is used as the separator in ISO
8601 date and time of day representation. */
static table const military_table[] =
{
{ "A",tZONE,-HOUR ( 1) },{ "B",-HOUR ( 2) },{ "C",-HOUR ( 3) },: : :
{ "Y",HOUR (12) },{ "Z",HOUR ( 0) },{ NULL,0 }
};
实际上,如果您在调试模式下运行date
,则可以看到正在发生的事情(为简洁起见,对输出进行了裁剪):
pax> for i in {A..I} {K..Z} ; do
...> date -d $i --debug 2>&1 | awk -vZ=$i '/parsed zone/{print " "Z":"$5}'
...> done
A:UTC-01
B:UTC-02
: :
T:UTC+07
: :
Z:UTC+00
大多数字母都基于military timezones应用时区偏移量,因此在通常用于分隔ISO和日期格式的T
在这里的处理方式有所不同,指定UTC+7
,并说明该地址与您位于UTC-3
的服务器之间的十小时差异。
最重要的是,您需要使用date
可接受的输入格式。这很简单(在这种情况下),按照下面的记录,用空格替换T:
pax:~> ### First,the problematic one.
pax:~> date +"%Y/%m/%d %H:%M" -d "20200819T1234" --debug
date: parsed number part: (Y-M-D) 2020-08-19
date: parsed zone part: UTC+07
date: parsed number part: 12:34:00
date: input timezone: parsed date/time string (+07)
date: using specified time as starting value: '12:34:00'
date: starting date/time: '(Y-M-D) 2020-08-19 12:34:00 TZ=+07'
date: '(Y-M-D) 2020-08-19 12:34:00 TZ=+07' = 1597815240 epoch-seconds
date: timezone: system default
date: final: 1597815240.000000000 (epoch-seconds)
date: final: (Y-M-D) 2020-08-19 05:34:00 (UTC)
date: final: (Y-M-D) 2020-08-19 13:34:00 (UTC+08)
2020/08/19 13:34
pax:~> ### Then,the correct one.
pax:~> date +"%Y/%m/%d %H:%M" -d "20200819 1234" --debug
date: parsed number part: (Y-M-D) 2020-08-19
date: parsed number part: 12:34:00
date: input timezone: system default
date: using specified time as starting value: '12:34:00'
date: starting date/time: '(Y-M-D) 2020-08-19 12:34:00'
date: '(Y-M-D) 2020-08-19 12:34:00' = 1597811640 epoch-seconds
date: timezone: system default
date: final: 1597811640.000000000 (epoch-seconds)
date: final: (Y-M-D) 2020-08-19 04:34:00 (UTC)
date: final: (Y-M-D) 2020-08-19 12:34:00 (UTC+08)
2020/08/19 12:34
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。