bash 組み込み printf を使用してタイムスタンプをエポックに変換する

bash 組み込み printf を使用してタイムスタンプをエポックに変換する

タイムスタンプを変換するさまざまな方法を見てみましょう。

2015-09-08 11:07:35

到着

1441703255

たとえば、非常に一般的な解決策がたくさん見つかりました。

date +%s --date "2015-09-08 11:07:35"

awk、Perlなどのソリューション。

しかし、SE変換回答printf「最新」bashバージョンで変換に使用されているようです。

これはいくつかの制限があるスクリプト内で使用されるため、これに依存する必要はなく、date代わりに潜在的に高速な方法を試してください。これまでの私の関連試みは次のとおりです。

printf '%(%s)2015-09-08 11:07:35'
bash: printf: warning: `2': invalid time format specification

printf '%(%s)T' "2015-09-08 11:07:35"
bash: printf: 2015-09-08 11:07:35: invalid number

printf日付形式の文字列を説明する正確なドキュメントがないため、正しくわからないようです。マンページは info coreutils 'printf invocation'この問題を解決するのに役立ちませんでした。

バッシュバージョンは

bash --version
GNU bash, Version 4.3.11(1)-release (x86_64-pc-linux-gnu)

答え1

もう一つの質問は、「取得方法」を具体的に尋ねることです。現在のエポック以降の時間(秒)です。日付形式とパラメータバッシュマニュアル(下にスクロールしてprintf):

%(datefmt)T

printf出力で結果の日付/時刻文字列を使用するようにします。日付機能strftime(3)の形式文字列です。ドンディスカッション epoch 以降の秒数を表す整数です。-1現在の時刻を表すものとシェルが-2呼び出された時刻を表す2つの特殊パラメータ値を使用できます。引数が指定されていない場合は、引数が指定されているかの-1ように変換が機能します。これは一般的な動作の例外ですprintf

したがって、引数はエポック以降の整数秒でなければなりません(例を参照)。「エポックタイムスタンプを人間が読める形式に変換する方法」への回答)。


¹特殊値(-1または-2)を使用するか、引数を使用しない場合(この場合のデフォルト値は-1

関連情報