RFC1123的なtimezone(+0900)を得る
かべ。
シェルスクリプトで RFC1123な日付のタイムゾーンの +0900 を得ようと思うと
なんか無駄に苦労するんですが、ましな解法ありますかね。
制約条件:
・date +% は使ってよい。 (POSIX?)
・date +%z は使わない (GNU date拡張?)
・printf(1)は使わない (sed,awkは許可)
・重量級スクリプト言語は反則 (perl,tcl,ruby,pythonなど)
GNU date は自明解 date +"%a, %d %b %Y %T %z" があるので退けます。
もちろん↓はdateを3回呼んでいるので時刻の変わり目では誤動作します。
==================
#!/bin/sh
( date +'%k %M'; TZ=GMT+0 date +'%k %M' ) | (
read LH LM; read GH GM;
Z=`expr '(' $LH '*' 60 + $LM ')' - '(' $GH '*' 60 + $GM ')'`
# clamp within 12hours (wrong)
if [ $Z -gt 720 ]; then Z=`expr $Z - 1440`;
elif [ $Z -lt -720 ]; then Z=`expr $Z + 1440`;
fi
P="+"; if [ $Z -lt 0 ]; then P="-"; Z=`expr 0 - $Z`; fi
date +"%a, %d %b %Y %T "$P`expr $Z / 600``expr '(' $Z / 60 ')' % 10``expr '(' $Z % 60 ')' / 10``expr $Z % 10`
)
==================
数値演算が組み込みのcshだと
サブシェル中でif-elseがうまく書けなかったので挫折。
…条件のdate +% を禁止してもあんま手間は変わらないか?
--
kabe
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735