日付変換の問題

日付変換の問題

タイムスタンプがCSTなので、既存の時間に1時間を追加してESTに変換しようとしました。

out_date3=$(ls -lrt out.log | awk '{print $8}')

出力は08:45です。

out_date4=$(out_date3 + 01:00)

出力が09:45になりたいのですが、out_date4は機能しません。

ベストアンサー1

米国中部と東部のタイムゾーンを使用し、GNU日付があるとします。

TZ=US/Eastern date --date='TZ="US/Central" 08:45'

「外部」(最初)TZ環境変数は、日付が米国/東部のタイムゾーンで機能する必要があることを示します。これはdate、入力が処理された後の時間印刷に影響します。その後、指定した時間を使用します。GNU日付のタイムゾーンルール、タイムゾーンの周りに二重引用符が必要です。ここの仕様では、--date米国/中部時間帯の08:45時間を印刷しようとしていることがわかります。

コードの最短修正は次のとおりです。

out_date4=$(TZ=US/Eastern date --date='TZ="US/Central" '"$out_date3")

ノート

lsout.logが6ヶ月以上前に最後に変更された場合、解析された出力は中断されます。出力の時間形式がls「月日時:分」から「月日年」に切り替わり、突然awkステートメントが送信されます。年度out_date3変数の時間と分の代わりに!

より柔軟には、再びGNUユーティリティを仮定すると、statコマンドを使用して最後の修正時間を取得してdate変換するように要求します。

out_date3=$(stat -c %Y out.log)
out_date4=$(TZ=US/Eastern date --date @"$out_date3")

この時点で、out_date3変数にはすでにout.logの最後の変更時刻(秒)が含まれています。さまざまな形式で印刷したい場合は、date次のようにしてください。

date --date @"$out_date3"
date +'%H:%M:%S' --date @"$out_date3"

おすすめ記事