在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'