2011-05-02 72 views
11

我正在寫一個需要當前UTC偏移量的autoconf腳本。沒有明顯的方式可以從日期程序中獲取此信息。是否有任何直接的方法可以從命令行實用程序獲取此信息,還是應該編寫一個測試來獲取信息並以某種方式捕獲它?我可以從Unix命令行獲得UTC偏移量嗎?

+0

你能解釋爲什麼你可能需要這個嗎?這聽起來像一個非常奇怪的要求。 – 2011-05-02 17:12:08

+1

,因爲我想在程序中嵌入編譯時間,並且__TIME__不會返回UTC偏移量,所以我無法將其轉化爲ISO 8601. – vy32 2011-05-03 03:22:18

回答

15

試試這個,看看它是否適合你:

date +%z 
3

是,date可以這樣做:

[[email protected]:~] date -R 
Mon, 02 May 2011 17:37:45 +0100 

,或者更具體:

[[email protected]:~] date -R | awk '{print $6}' 
+0100 
[[email protected]:~] date +%z 
+0100 

閱讀date --help是非常有用的。

+1

這很棒。我正在查看手冊頁,無法弄清楚。 – vy32 2011-05-03 03:23:01

+0

我有與man page相同的問題 - 訣竅是「man strftime」 – sage 2014-08-09 16:33:33

5

對於其他人做ISO8601,你可以選擇的一些變種:

date +%Y%m%dT%H%M%S%z  # 20140809T092143-0700 
date -u +%Y%m%dT%H%M%S%z # 20140809T162143+0000 
date -u +%Y%m%dT%H%M%SZ # 20140809T162143Z 

我喜歡那些因爲缺少標點支架普遍使用。請注意,大寫字母Z是UTC的「硬編碼」 - 使用%Z將把UTC或其他命名的時區。如果您更喜歡標點符號:

date +%Y-%m-%dT%H:%M:%S%z  # 2014-08-09T09:21:43-0700 
date +%Y-%m-%dT%H:%M:%S%:z  # 2014-08-09T09:21:43-07:00 - NOT ALL SYSTEMS 
date -u +%Y-%m-%dT%H:%M:%S%z # 2014-08-09T16:21:43+0000 
date -u +%Y-%m-%dT%H:%M:%S%:z # 2014-08-09T16:21:43+00:00 - NOT ALL SYSTEMS 
date -u +%Y-%m-%dT%H:%M:%SZ # 2014-08-09T16:21:43Z 

請參閱man strftime,因爲支持的格式各不相同。例如,有些系統支持使用%:z,%:: z或%::: z插入冒號 - 我的五個系統中只有兩個(Debian,Ubuntu可以,但Mac,BusyBox,QNX不) 。

我經常回https://en.wikipedia.org/wiki/ISO_8601作爲參考。