busybox 中的 date 命令不接受格式化的输入日期

tzi*_*ppy 5 date busybox

我想使用busybox 的date命令(BusyBox v1.21.0)设置日期。我想设置计算机的自定义日期是这种形式:

Tue, 15 Jan 2019 10:46:13 GMT
Run Code Online (Sandbox Code Playgroud)

我的date命令能够使用以下字符串以相同的格式打印日期:

date +"%a, %d %b %Y %T %Z"

它以与上述完全相同的格式返回日期。但是当我使用-s选项设置日期时,它不会接受这一点。

这失败例如:

date -u +"%a, %d %b %Y %T %Z" -s "Wed, 17 Feb 2010 19:14:32 UTC"
date: invalid date 'Wed, 17 Feb 2010 19:14:32 UTC'
Run Code Online (Sandbox Code Playgroud)

我知道busybox命令在功能上有所减少,但我想象当它可以处理格式字符串以所需形式打印当前日期时,它也应该能够使用它来解释输入字符串。

meu*_*euh 9

您可以让 busybox date 为您进行格式转换,用于-D指定输入格式,以及通常的+...输出格式,并-d提供参考日期和时间。例如,

r='Tue, 15 Jan 2019 09:16:53 GMT'
d=$(busybox date -d "$r" -D "%a, %d %b %Y %T %Z" +'%Y-%m-%d %H:%M:%S')
# d becomes 2019-01-15 09:01:53
busybox date -s "$d"
Run Code Online (Sandbox Code Playgroud)

  • 好吧,无论出于什么原因,ArchLinux busybox 不接受 `date -D` 中的 `%Z`。否则工作正常。 (3认同)

fro*_*utz 8

busyboxdate只接受非常特定的时间格式,而不是任意的时间格式。

$ busybox date --help
[...]
    [-s,--set] TIME Set time to TIME
[...]
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
Run Code Online (Sandbox Code Playgroud)

所以你只需要这样写date -s 2010.02.17-19:14:32(或任何你喜欢的格式)。