300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Linux shell不同时区时间转换(时区 夏令时 时间戳)

Linux shell不同时区时间转换(时区 夏令时 时间戳)

时间:2018-12-31 18:48:05

相关推荐

Linux shell不同时区时间转换(时区 夏令时 时间戳)

如果目标地区没有使用夏令时,可以日期或时间戳直接减去小时差,也可以使用下面兼容夏令时的方法。

概念:

时间戳:从格林威治时间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 convertTZBASE=Asia/Shanghai# Time zones to display# See /usr/share/zoneinfo/ for more namesTZONES='UTC America/Los_Angeles America/New_York Europe/London Europe/Paris'# Display formatFORMAT='%H:%M (%p) %Z %a %m %b %Y'if [ "$1" ] ; thentime="$1"elsetime=`date +%T`fi# Show the time from the specified input time zone in the specified output# time zoneshowtime(){TZIN=$1TZOUT=$2TZ=$TZOUT date --date='TZ="'$TZIN'"'" $time" +"$time $TZIN is $TZOUT $FORMAT"}for tz in $TZONES ; doshowtime $TZBASE $tzdoneecho

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。