ローカル日時をUTC日時に変換するには?

ローカル日時をUTC日時に変換するには?

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前の回答で説明したように、カスタム形式を理解できる形式に変換する必要があります。

関連情報