[英]How to show date which is stored in variable in different timezone in shell script
我有一個存儲在變量中的日期
myTime=$(date -d "20120101 14:13:12" +'%Y%m%d %H:%M:%S')
我想在不導出時區變量的情況下在不同的時區顯示它。 我試過這個命令:
c=$(TZ=":US/Eastern" date -d "$myTime" +'%Y%m%d %H:%M:%S')
但它不起作用。 任何人都可以告訴我我的錯誤是什么?
時區! 這都是關於時區的。
您想要將時間存儲在當前區域中
TZ=UTC
then="$(date -d '20120101 14:13:12' +'%Y%m%d %H:%M:%S')"
現在你有一個日期字符串! 但等等,那是UTC或US / Eastern的那個日期? 我們的區域設置為UTC,但讓我們看一下這個值......
echo "$then"
20120101 14:13:12
有趣,我沒有看到一個區域...我怎么知道它是UTC的時間? 簡單回答:你做不到! 您必須在字符串中對區域進行編碼 ,或者在當前區域中對區域進行編碼 。
您可以更改下次運行的區域date
使用:
eastern="$(TZ=US/Eastern date -d "$then" +%Y-%m%dT%H:%M:%S)"
echo "$eastern"
2012-01-01T14:13:12
但等等,是不是就在同一時間? 是的,但現在它是東方的...你只是不能說,因為你沒有打印區域。 輸入沒有指定區域,因此它被讀作東方,然后轉換為輸出區域,這是東方,並寫出為東方省略區域。
要在區域之間進行轉換,您必須在時間字符串中包含區域。
GNU日期非常好,如果你問的話,將包括這個:
then="$(TZ=UTC date -d '20120101 14:13:12' --rfc-3339=seconds)"
echo "$then"
2012-01-01 14:13:12+00:00
現在您在輸入區域中看到輸入日期/時間,並且您知道它在輸入區域中,因為+00:00會告訴您。
現在你可以回去嘗試轉換它:
eastern="$(TZ=US/Eastern date -d "$then" --rfc-3339=seconds)"
echo "$eastern"
2012-01-01 09:13:12-05:00
啊哈! 現在,因為您在輸入中包含了-d
的區域,並且您告訴date
在不同的區域中輸出,所以時間已經改變。 如果您真的想要,可以在此步驟中以輸出格式省略區域:
eastern="$(TZ=US/Eastern date -d "$then" '%Y-%m-%d %H:%M:%S')"
echo "$eastern"
2012-01-01 09:13:12
但是您不應該省略該區域,因為時間字符串的后續用戶將不知道它代表的區域。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.