2011-05-02 66 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作为参考。