【问题标题】:date and time from epoch in seconds WITH timezone and daylight saving带有时区和夏令时的纪元的日期和时间(以秒为单位)
【发布时间】:2016-03-29 20:17:33
【问题描述】:

我正在尝试从 bash 中的 epoch 获取当前日期/时间秒数。 我做到了

date +%s

但这不能处理我的时区和夏令时。

类似的东西 1) 获取纪元 2)加3600(我在罗马,所以GMT+1) 3) 仅当我们处于夏令时时才添加 3600

在 bash 中有可能吗?

【问题讨论】:

    标签: bash datetime


    【解决方案1】:

    我找到了办法:

    #!/bin/sh
    OFFSET=$(date +%z)
    SIGN=${OFFSET:0:1}
    HOURS=${OFFSET:1:2}
    MINUTES=${OFFSET:3:2}
    EPOCH=$(date +%s)
    echo $(( ${EPOCH} ${SIGN} ( ${HOURS} * 3600 + ${MINUTES} * 60 ) ))
    

    【讨论】:

      【解决方案2】:

      date [-u|--utc|--universal] 返回 UTC 表示,而 date 返回与 DST(夏令时)相关的系统本地时间。

      示例(假设 2016-06-01 在 DST 内):

      从您的时区获取当地时间(夏令时为 GMT+1 +1)

      $ date -d '2016-06-01 02:00:00+0200' +'%s = %Y-%m-%d %H:%M:%S'
      1464739200 = 2016-06-01 02:00:00
      

      从您的时区获取 UTC(纪元)(对于 DST,GMT+1 +1)

      $ date -u -d '2016-06-01 02:00:00+0200' +'%s = %Y-%m-%d %H:%M:%S'
      1464739200 = 2016-06-01 00:00:00
      

      【讨论】:

      • 值得指出的是,日期的这种用法特定于 GNU coreutils 的版本(即在 Linux 中使用)。 -d 选项在 OSX、FreeBSD、NetBSD、Solaris 等中不存在(或做不同的事情)。
      猜你喜欢
      • 2014-03-14
      • 2012-09-08
      • 2012-04-07
      • 1970-01-01
      • 2015-11-03
      • 2012-08-23
      • 1970-01-01
      • 2012-07-09
      • 2013-11-03
      相关资源
      最近更新 更多