如何仅使用 Busybox 工具将具有指定月份的日期转换为 UNIX 时间戳?

如何仅使用 Busybox 工具将具有指定月份的日期转换为 UNIX 时间戳?

Mon Jan 1 23:59:59 2018 GMT我在一个几乎只能访问 busybox 工具的环境中工作,并尝试在 shell 脚本中将日期格式转换为 unix 时间戳。我无法更改正在解析的输入时间的格式。似乎busybox date无法理解这种日期格式,或任何其他具有指定月份的格式。我有一个非常丑陋的脚本可以做到这一点,但是有人知道更好的吗?

编辑:该date -D选项对我不起作用,我明白了

date: invalid option -- 'D'     
BusyBox v1.24.1 (2018-01-11 16:07:45 PST) multi-call binary.     

Usage: date [OPTIONS] [+FMT] [TIME]`

答案1

busybox date2完全有能力在一些帮助下解析给定字符串中的日期1(GMT 时区除外)。

$ gdate='Mon Jan 1 23:59:59 2018 GMT'
$ TZ=GMT0 busybox date -d "$gdate" -D '%a %b %d %T %Y %Z'
Mon Jan  1 23:59:59 GMT 2018

帮助是通过-D选项给出的:源格式的描述。

要获取 UNIX 时间戳,只需添加预期的输出格式+'%s'

$  TZ=GMT0 busybox date -d "$gdate" -D '%a %b %d %T %Y %Z' +'%s'
1514851199

1
busyboxdate具有 GNU 命令的大部分date功能,以及 GNUdate命令所没有的一项功能:-D选项。获取busybox帮助如下:

$ busybox date --help

BusyBox v1.27.2 (Debian 1:1.27.2-2) 多调用二进制文件。

用法:日期 [选项] [+FMT] [时间]

显示时间(使用+FMT),或设置时间

    [-s,--set] TIME Set time to TIME
    -u,--utc        Work in UTC (don't convert to local time)
    -R,--rfc-2822   Output RFC-2822 compliant date string
    -I[SPEC]        Output ISO-8601 compliant date string
                    SPEC='date' (default) for date only,
                    'hours', 'minutes', or 'seconds' for date and
                    time to the indicated precision
    -r,--reference FILE     Display last modification time of FILE
    -d,--date TIME  Display TIME, not 'now'
    -D FMT          Use FMT for -d TIME conversion

请注意该-D FMT选项。


2
请注意,您可以date通过两种方式调用 busybox:

$ busybox date

busybox或者,如果具有该名称的链接date已安装在正确的PATH目录中:

$ date

要验证,只需询问--version--help找出您安装的日期即可。

使用 GNU date

$ date --version
date (GNU coreutils) 8.28

或者(忙碌盒date):

$ date --help
BusyBox v1.27.2 (Debian 1:1.27.2-2) multi-call binary.

相关内容