我有以下 bash 函数,它在运行 ubuntu 的机器上生成 iso-8601 格式的纪元列表,它工作正常。(其中 isdate 和 isint bash 函数用于测试输入)
gen_epoch()
{
#@ USAGE: gen_epoch [start_date_iso] [end_date_iso] [increment_in_seconds]
#@
#@ TASK : generate an epoch list (epoch list in isodate format).
#@ result on STDOUT: [epoch_list]
#@ error_code : 2 0
## test argument
if [ "$#" -ne 3 ]; then echo "$FUNCNAME: input error [nb_of_input]"; return 2
elif [ $( isdate $1 &> /dev/null; echo $? ) -eq 2 ]; then echo "$FUNCNAME: argument error [$1]"; return 2
elif [ $( isdate $2 &> /dev/null; echo $? ) -eq 2 ]; then echo "$FUNCNAME: argument error [$2]"; return 2
elif [ $( isint $3 &> /dev/null; echo $? ) -eq 2 ]; then echo "$FUNCNAME: argument error [$3]"; return 2
else local beg=$( TZ=UTC date --date="$1" +%s ); local end=$( TZ=UTC date --date="$2" +%s ); local inc=$3; fi
## generate epoch
while [ $beg -le $end ]
do
local date_out=$( TZ=UTC date --date="UTC 1970-01-01 $beg secs" --iso-8601=seconds ); beg=$(( $beg + $inc ))
echo ${date_out%+*}
done
}
它为此命令行示例生成预期值:
gen_epoch 2014-04-01T00:00:00 2014-04-01T07:00:00 3600
预期值:
2014-04-01T00:00:00
2014-04-01T01:00:00
2014-04-01T02:00:00
2014-04-01T03:00:00
2014-04-01T04:00:00
2014-04-01T05:00:00
2014-04-01T06:00:00
2014-04-01T07:00:00
但是我在没有root权限的服务器上尝试了这个功能,我发现了以下结果:
2014-03-31T17:00:00
2014-03-31T18:00:00
2014-03-31T19:00:00
2014-03-31T20:00:00
2014-03-31T21:00:00
2014-03-31T22:00:00
2014-03-31T23:00:00
2014-04-01T00:00:00
我已经看到服务器时间原点不在 1970-01-01T00:00:00。键入TZ=UTC date --date="1970-01-01T00:00:00" +%s
命令给出的值-25200
对应于 7 小时的延迟,而它应该给出 0。我的问题是如何在服务器上纠正这个问题?假设我不知道我在哪台机器上运行它,你能帮我找到一个等效的解决方案吗,所以我知道系统时间是否正确?