Busyboxツールのみを使用して、指定された月の日付をUNIXタイムスタンプに変換するにはどうすればよいですか?

Busyboxツールのみを使用して、指定された月の日付をUNIXタイムスタンプに変換するにはどうすればよいですか?

Mon Jan 1 23:59:59 2018 GMT私はビジボックスツールへのアクセスがほとんど制限されている環境で作業しており、シェルスクリプトで日付形式を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
busyboxには、dateGNUコマンドのほとんどの機能datedateGNUコマンドにない機能の1つである-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次の
2つの方法でbusyboxを呼び出すことができますdate

$ busybox date

busyboxまたは、その名前のリンクがdateすでに正しいディレクトリにインストールされている場合PATH:

$ date

確認するには、インストール日を尋ねるか調べてください --version--help

GNUの使用date:

$ date --version
date (GNU coreutils) 8.28

または(Busybox date):

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

おすすめ記事