將日期/時間列表從 GMT 轉換為 PST

將日期/時間列表從 GMT 轉換為 PST

如果我單獨運行該命令,它似乎工作正常。例如使用:

date --date='TZ="PST" Sun Jan 01 05:00:10 2017'

2016 年 12 月 31 日星期六 21:00:10(太平洋標準時間)

但是,我嘗試使用帶有日期/時間列表的輸入文件,並且所有引號都存在問題,並且似乎無法使其工作。我的輸入檔(範例名稱dates.input看起來像:

$ cat dates.input 
Sun Jan 01 06:49:33 2017
Sun Jan 01 05:44:17 2017
Sun Jan 01 05:43:23 2017
Sun Jan 01 05:39:13 2017
Sun Jan 01 05:00:10 2017

我遇到問題的命令是:

while read i; do "date --date='TZ="PST" ${i}'"; done < dates.input

這使

bash: date --date='TZ=PST Sun Jan 01 06:49:33 2017': command not found...
bash: date --date='TZ=PST Sun Jan 01 05:44:17 2017': command not found...
bash: date --date='TZ=PST Sun Jan 01 05:43:23 2017': command not found...
bash: date --date='TZ=PST Sun Jan 01 05:39:13 2017': command not found...
bash: date --date='TZ=PST Sun Jan 01 05:00:10 2017': command not found...

有人對如何讓它發揮作用有什麼建議嗎?

謝謝

答案1

作為一個例子,讓我們選擇這個值i

$ i='Sun Jan 01 06:49:33 2017'

現在,讓我們在循環中運行該命令:

$ "date --date='TZ="PST" ${i}'"
bash: date --date='TZ=PST Sun Jan 01 06:49:33 2017': command not found

正如您所看到的,在命令及其參數兩側加上引號會使 shell 感到困惑。嘗試改為:

$ date --date="TZ=\"PST\" ${i}"
Sat Dec 31 22:49:33 PST 2016

以上就成功了。

將此命令放入循環中後,循環現在可以工作:

$ while read i; do date --date="TZ=\"PST\" ${i}"; done < dates.input
Sat Dec 31 22:49:33 PST 2016
Sat Dec 31 21:44:17 PST 2016
Sat Dec 31 21:43:23 PST 2016
Sat Dec 31 21:39:13 PST 2016
Sat Dec 31 21:00:10 PST 2016

相關內容