带有时区和夏令时的纪元的日期和时间(以秒为单位)
Posted
技术标签:
【中文标题】带有时区和夏令时的纪元的日期和时间(以秒为单位)【英文标题】: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 中有可能吗?
【问题讨论】:
【参考方案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 等中不存在(或做不同的事情)。以上是关于带有时区和夏令时的纪元的日期和时间(以秒为单位)的主要内容,如果未能解决你的问题,请参考以下文章
如何从给定城市的给定日期和时间获取 unix 纪元时间戳(以秒为单位)?