タイムスタンプを変換するさまざまな方法を見てみましょう。
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
)