簡體   English   中英

如何在shell腳本中顯示存儲在變量中的日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM