bashスクリプトを操作しようとしていますが、これを行うには、+%Y%m%d%H%M%S
現地時間形式(「20150903170731」など)を同じ形式のUTC時間に変換する必要があります。
date -u
現在UTC時間を教えてくれることがわかります。
$ date +%Y%m%d%H%M%S -u
20150903161322
または-u
現地時間なし(ここではBST):
$ date +%Y%m%d%H%M%S
20150903171322
パラメータを追加するとdate
エラーが発生します。
echo "20150903154607" | xargs date +"%Y%m%d%H%M%S" -u
date: extra operand `20150903154607'
これらのエラーなしでこの変換を実行する方法はありますか?
答え1
使用する日付を渡すには、オプションをdate
使用します。-d
したがって、あなたのコマンドは次のようになりますecho "20150903154607" | xargs date +"%Y%m%d%H%M%S" -u -d
。
ただし、指定した日付形式は使用されません。
$ date -d 20150903154607
date: invalid date ‘20150903154607’
$ date -d 20150903\ 15:46:07
Thu Sep 3 15:46:07 BST 2015
まず、少しのマッサージをしてください(GNU sed):
$ echo "20150903154607" \
| sed -re 's/^([0-9]{8})([0-9]{2})([0-9]{2})([0-9]{2})$/\1\\ \2:\3:\4/' \
| xargs date -u -d
Thu Sep 3 15:46:07 UTC 2015
-u
現地時間をUTCに変換するには、入出力日の解釈に影響を与えるため、もう少し作業を行う必要があります。
$ echo "20150903171734" \
| sed -re 's/^([0-9]{8})([0-9]{2})([0-9]{2})([0-9]{2})$/\1\\ \2:\3:\4/' \
| xargs date +@%s -d \
| xargs date -u +%Y%m%d%H%M%S -d
20150903161734
上記の最初の呼び出しはdate
現地時間(timeベース$TZ
)をepoch以降の秒に変換し、次の呼び出しはepoch秒をUTCの日付と時刻に変換します。
答え2
私も簡単なものを使用しました。
date -u -d @$(date -d '2019-09-17 19:29:45' +%s)
Tue Sep 17 23:29:45 UTC 2019
date
前の回答で説明したように、カスタム形式を理解できる形式に変換する必要があります。