Linux

如何僅使用 Busybox 工具將具有命名月份的日期轉換為 unix 時間戳?

  • February 10, 2018

我在一個幾乎只能訪問busybox工具的環境中工作,並嘗試Mon Jan 1 23:59:59 2018 GMT在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]`

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

1busybox具有 GNU命令

的大部分功能,而 GNU命令卻沒有:選項。獲取busybox幫助如下:date``date``date``-D

$ busybox date --help

BusyBox v1.27.2 (Debian 1:1.27.2-2) 多呼叫二進製文件。

用法:日期

$$ OPTIONS $$ $$ +FMT $$ $$ TIME $$ 顯示時間(使用+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.
…
…

引用自:https://unix.stackexchange.com/questions/423101