Bashスクリプトでタイムゾーンを変更するには?

Bashスクリプトでタイムゾーンを変更するには?

私はLinux Ubuntuで作業しており、出力が私のサーバー時間から7時間前のタイムゾーン変換であるbashスクリプトが必要です。

私のサーバー時間:

2017年7月23日月曜日23:00:00

私が達成したいもの:

2017年7月24日月曜日06:00:00

私のBashスクリプトでこれを試しました。

#!/bin/bash

let var=$(date +%H)*3600+$(date +%M)*60+$(date +%S)
seven=25200
time=$(($var+$seven))

date=$(date --date='TZ="UTC+7"' "+%Y-%m-%d")
hours=$(date -d@$time -u +%H:%M:%S)

echo "$date" "$hours"

出力は次のとおりです

2017-07-23 06:00:00

時間は有効ですが、日付はまだサーバーの日付と一致します。この問題を解決する他の方法はありますか?

答え1

TZスクリプトの最初に環境変数を変更することで、スクリプト全体のタイムゾーンを変更できます。単一のコマンドで上書きできます。

たとえば、このスクリプト

#!/bin/bash
export TZ=Australia/Sydney

date
TZ=US/Pacific date
date

出力されます

Sun 30 Jul 21:56:25 AEST 2017
Sun 30 Jul 04:56:25 PDT 2017
Sun 30 Jul 21:56:25 AEST 2017

答え2

質問を文字通り受け入れると、現在の地域の現在時刻より7時間遅れた日付文字列を取得するには、次のように簡単です。

date -d "7 hours" "+%Y-%m-%d %H:%M:%S"

ただし、実際に必要なものが異なる時間帯から現地の日付/時刻を抽出することである場合は、他の回答のアドバイスに従うことをお勧めします。

答え3

に出てくる引用を見ましたかman bash?私はこのようなものがあなたが探しているものだと
思います。DATE=$( date --date="TZ=\"Asia/Taipei\" $TIME" +%F\ %H:%M )誰でも私を招待できますか?

関連情報