GMT 纪元时间

GMT 纪元时间

AIX

date -u给出 GMT 格式的日期和时间
date给出本地时区的日期和时间
date +%s给出纪元时间的本地时间

有没有办法以纪元格式获取 GMT 时间?

在我使用的 AIX 中,只有 -n 和 -u 选项可用(因此我无法使用 -f 选项)。

我的目标是计算当地时间和格林威治标准时间之间的小时偏移量。

我可以解析$TZ environment variable这可能很乏味。相反,将两个时区之间的纪元时间差除以 60 应该大约可以给我答案。

答案1

不存在“纪元格式的本地时间”这样的东西,date +%s总是打印自纪元以来的秒数,即自 1970-01-01 UTC 以来的秒数。所有时区的数字都相同。

但是,大多数strftime(3)实现date +%z都会打印指定时区的数字偏移量:

$ TZ=Australia/Darwin date +%z
+0930
$ TZ=America/Toronto date +%z
-0400

这适用于 GNUdate和 BSD date。不过我对AIX一无所知。

假设它有效,您可以计算任何时区的以秒为单位的偏移量。和bash

#! /bin/bash
offset="$(TZ="$1" date +%z)"
sign=${offset:0:1}1
hours=${offset:1:2}
minutes=${offset:3:2}
if [ x"${hours:0:1}" = x0 ]; then hours="${hours:1}"; fi
if [ x"${minutes:0:1}" = x0 ]; then minutes="${minutes:1}"; fi
printf 'offset of TZ=%s: %d\n' "$1" $(( sign * 3600 * hours + 60 * minutes ))

答案2

如果您的目标是计算 UTC/GMT 与当地时间之间的小时差,只需这样询问:

UTC=$(date -u +%H)
LT=$(date +%H)
DIFF=$((UTC - LT))

请注意,根据一天中的时间和相对位置,结果可能为负。

答案3

如果您的 AIX 至少有 Perl 5.9,那么您可以使用时间::件核心模块获取时区偏移量(以秒为单位):

perl -MTime::Piece -le '$t=Time::Piece->new;print $t->tzoffset'

对于特定时区,执行以下操作:

TZ=澳大利亚/达尔文 perl -MTime::Piece -le '$t=Time::Piece->new;print $t->tzoffset'

相关内容