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 date
2完全有能力在一些帮助下解析给定字符串中的日期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.
…
…