【问题标题】:Can I get UTC offset from Unix command line?我可以从 Unix 命令行获取 UTC 偏移量吗?
【发布时间】:2011-08-17 02:45:23
【问题描述】:

我正在编写一个需要当前 UTC 偏移量的 autoconf 脚本。没有明显的方法可以使这个程序过时。是否有任何直接的方法可以从命令行实用程序获取此信息,或者我应该编写一个测试来获取信息并以某种方式捕获它?

【问题讨论】:

  • 你能解释一下你为什么需要这个吗?这听起来像是一个很奇怪的要求。
  • 因为我想在程序中嵌入编译时间,而TIME不返回UTC偏移量,所以无法转成ISO 8601。

标签: unix command-line utc autoconf


【解决方案1】:

试试这个,看看它是否适合你:

date +%z

【讨论】:

    【解决方案2】:

    对于执行 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参考。

    【讨论】:

      【解决方案3】:

      是的,date 可以这样做:

      [tomalak@lolphin:~] date -R
      Mon, 02 May 2011 17:37:45 +0100
      

      或者,更具体地说:

      [tomalak@lolphin:~] date -R | awk '{print $6}'
      +0100
      [tomalak@lolphin:~] date +%z
      +0100
      

      阅读date --help很有用。

      【讨论】:

      • 太好了。我正在查看手册页,但无法弄清楚。
      • 我在手册页上遇到了同样的问题 - 诀窍是 man strftime
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 2013-10-15
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多