【发布时间】:2016-03-29 20:17:33
【问题描述】:
我正在尝试从 bash 中的 epoch 获取当前日期/时间秒数。 我做到了
date +%s
但这不能处理我的时区和夏令时。
类似的东西 1) 获取纪元 2)加3600(我在罗马,所以GMT+1) 3) 仅当我们处于夏令时时才添加 3600
在 bash 中有可能吗?
【问题讨论】:
我正在尝试从 bash 中的 epoch 获取当前日期/时间秒数。 我做到了
date +%s
但这不能处理我的时区和夏令时。
类似的东西 1) 获取纪元 2)加3600(我在罗马,所以GMT+1) 3) 仅当我们处于夏令时时才添加 3600
在 bash 中有可能吗?
【问题讨论】:
我找到了办法:
#!/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 ) ))
【讨论】:
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
【讨论】:
-d 选项在 OSX、FreeBSD、NetBSD、Solaris 等中不存在(或做不同的事情)。