【问题标题】:Parsing YYYYMMDDHH-format dates with date from GNU coreutils使用来自 GNU coreutils 的日期解析 YYYYMMDDHH 格式的日期
【发布时间】:2025-12-26 17:20:08
【问题描述】:

不确定这是否重复。如果是,请指出答案。

$date  -d '2018022210' +'%Y%m%d%H'

给我一​​个错误,说无效 (date: invalid date 2018022210)。正确的做法是什么?

【问题讨论】:

标签: shell gnu-coreutils


【解决方案1】:

如果您想转换为 GNU 日期可以解析的格式,在小时前添加 T 就足够了:

in='2018022210'
out="${in:0:8}T${in:8}"
date --utc -d "$out"

...正确发出:

Thu Feb 22 03:00:00 UTC 2018

【讨论】:

  • 要在更简单的 POSIX shell(如 dash(仍然是 GNU date))中执行此操作,请将第二行替换为 out="${in%??}T${in#????????}"
【解决方案2】:

感谢@charles 的回答。正如@charles 提到的,我还能够以稍微不同的方式进行解析。

date -d "$(echo '2018022210'  | awk '{print substr($1,1,8),substr($1, 9,10)}')" +'%Y%m%d %H'

【讨论】: