Linux shell不同时区时间转换(时区 夏令时 时间戳)
步骤将目标日期转换为时间戳将时间戳用新的时区转换回时间times=$(TZ=Asia/Shanghai date -d @`date +%s` "+%Y-%m-%d %H:%M:%S")echo $times...
·
如果目标地区没有使用夏令时,可以日期或时间戳直接减去小时差,也可以使用下面兼容夏令时的方法。
概念:
时间戳 :从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。是不会随着时区夏令时的改变而改变。(除非你离开地球光速行驶)
时区 : 由于世界各国家与地区经度不同,地方时也有所不同,因此会划分为不同的时区。正式的时区划分包括24个时区
夏令时 :一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。全世界有近110个国家每年要实行夏令时。
- 服务器产生的时间戳是不受时区和夏令时影响的,不管是从日期转换还是其他途径获取的,但是转回夏令时日期格式需要函数支持。
- 从当地的夏令时年月日格式转换的时间戳是否会收夏令时影响,取决于转换函数。
方法
- 将目标日期转换为时间戳。
- 将时间戳用新的时区转换回时间,这里需要设置时区名字不然不能自动调整夏令时。
times=$(TZ=Asia/Shanghai date -d @`date +%s` "+%Y-%m-%d %H:%M:%S")
echo $times
注意 :某些国外的服务器可能没有定义Asia/Shanghai时区,不会报错但结果不正确;此时要把上海改成Asia/Hong_Kong
将不同时区时间转换为上海时区的脚本:
#!/bin/sh
#
# Print the specified (or current) time from base time in other time zones
# and the converse
#
# Base time zone from/to which to convert
TZBASE=Asia/Shanghai
# Time zones to display
# See /usr/share/zoneinfo/ for more names
TZONES='UTC America/Los_Angeles America/New_York Europe/London Europe/Paris'
# Display format
FORMAT='%H:%M (%p) %Z %a %m %b %Y'
if [ "$1" ] ; then
time="$1"
else
time=`date +%T`
fi
# Show the time from the specified input time zone in the specified output
# time zone
showtime()
{
TZIN=$1
TZOUT=$2
TZ=$TZOUT date --date='TZ="'$TZIN'"'" $time" +"$time $TZIN is $TZOUT $FORMAT"
}
for tz in $TZONES ; do
showtime $TZBASE $tz
done
echo
更多推荐
已为社区贡献1条内容
所有评论(0)