linux 时区文件的规则,linux – 如何将POSIX时间转换为Olson时区文件...

因为我需要它来处理我的特殊情况,所以我做了一个小的bash脚本.

我知道这并不是涵盖所有情况.但至少你可以用它作为参考.

我的任务是解析字符串:

“EST%dEDT%d,M%d.%d.%d/%d:%d,M%d.%d.%d/%d:%d”

例:

EST5EDT4,M1.3.0/2:00,M11.2.6/2:00

$1 – POSIX字符串

$2 – 输出文件夹的路径

$3 – 输出的文件名

timezoneposix2olson()

{

posix=$1

MONTHS=(ZERO Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)

DAYS=(Sun Mon Tue Wed Thu Fri Sat)

IFS=',' tokens=( $posix )

# parse EST5EDT4

tmp=${tokens[0]#*EST}

no_dst_offset=${tmp%EDT*}

no_dst_offset=$(( no_dst_offset*-1 ))

dst_offset=${tokens[0]#*EDT}

dst_offset=$(( dst_offset*-1 ))

#parse M1.3.0/2:00

switch_time1=${tokens[1]#*/}

temp=${tokens[1]#*M}

switch_month1=${temp%%.*}

temp=${tokens[1]#*.}

switch_week1=${temp%.*}

temp=${tokens[1]##*.}

switch_day1=${temp%/*}

#parse M11.2.6/2:00

switch_time2=${tokens[2]#*/}

temp=${tokens[2]#*M}

switch_month2=${temp%%.*}

temp=${tokens[2]#*.}

switch_week2=${temp%.*}

temp=${tokens[2]##*.}

switch_day2=${temp%/*}

if [ $switch_week1 -eq 5 ] ; then

rule_day1=last${DAYS[$switch_day1]}

else

rule_day1=$(( (switch_week1-1)*7+1 ))

rule_day1="${DAYS[$switch_day1]}>=${rule_day1}"

fi

if [ $switch_week2 -eq 5 ] ; then

rule_day2=last${DAYS[$switch_day2]}

else

rule_day2=$(( (switch_week2-1)*7+1 ))

rule_day2="${DAYS[$switch_day1]}>=${rule_day2}"

fi

delta=$((dst_offset - no_dst_offset))

delta="${delta#-}:00"

if [ $dst_offset -gt 0 ] ; then

offset_mod1="+$dst_offset"

else

offset_mod1=$dst_offset

fi

if [ $no_dst_offset -gt 0 ] ; then

offset_mod2="+$no_dst_offset"

else

offset_mod2=$no_dst_offset

fi

local olson_file="$2/$3.zone"

echo "Rule LOCAL 1996 max - ${MONTHS[$switch_month1]} $rule_day1 $switch_time1 $delta $offset_mod1" > $olson_file

echo "Rule LOCAL 1996 max - ${MONTHS[$switch_month2]} $rule_day2 $switch_time2 0 $offset_mod2" >> $olson_file

echo "Zone Localtime $no_dst_offset LOCAL GMT%s" >> $olson_file

zic -d $2 -v $olson_file

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值