我遵循了许多堆栈交换网站和其他各种教程网站上关于如何进行日期数学的示例。我尝试过 linux(在容器上),但得到了完全相同的错误:
$ docker run -it bash date -d '2014-11-19T15:40:30+10d'
date: invalid date '2014-11-19T15:40:30+10d'
bash-5.0# date -d '+10 days'
date: invalid date '+10 days'
bash-5.0# date -d '+10 d'
date: invalid date '+10 d'
bash-5.0# date -d '2014-11-19T15:40:30+10 d'
date: invalid date '2014-11-19T15:40:30+10 d'
bash-5.0# date -d '2014-11-19T15:40:30+10 days'
date: invalid date '2014-11-19T15:40:30+10 days'
bash-5.0# date -d '2014-11-19T15:40:30 +10 days'
date: invalid date '2014-11-19T15:40:30 +10 days'
bash-5.0# date -d '2014-11-19T15:40:30 +10 d'
date: invalid date '2014-11-19T15:40:30 +10 d'
bash版本:
$ docker run -it bash bash --version
GNU bash, version 5.0.2(1)-release (x86_64-pc-linux-musl)
Copyright (C) 2019 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.
他们不可能全都错了。
答案1
$ docker run bash date --version
BusyBox v1.29.3 (2019-01-24 07:45:07 UTC) multi-call binary.
...
您使用的 BusyBox 版本date
与大多数桌面 Linux 发行版上的 Coreutils 版本不完全兼容。引用 BusyBox 的手册页:
Recognized TIME formats:
hh:mm[:ss]
[YYYY.]MM.DD-hh:mm[:ss]
YYYY-MM-DD hh:mm[:ss]
[[[[[YY]YY]MM]DD]hh]mm[.ss]
'date TIME' form accepts MMDDhhmm[[YY]YY][.ss] instead
您可能的选择是:
- 使用 BusyBox 专用
-D
键(例如busybox date -D +10days
),它扩展了对时间表达式的支持,类似于 Coreutilsdate -d
所具有的功能。请注意,Coreutils 不会识别该选项date
。 - 凑合使用两个实现都支持的 BusyBox 语法。
- 安装核心工具在你的 Docker 容器中。
- 使用具有 Coreutils 的现有容器。