[mew-dist 21597] Re: add no Messege-ID: by Mew
Shun-ichi GOTO
gotoh at example.com
2002年 9月 2日 (月) 23:32:29 JST
>>>>> at Mon, 02 Sep 2002 22:07:23 +0900 (JST)
>>>>> kazu == Kazu Yamamoto (山本和彦) <kazu at example.com> said,
kazu> Q1) システムの time-zone を取得するのは、(getenv "TZ") が正しい方法な
kazu> のでしょうか?
環境変数ってくらいなので、「システムの...」ではないですね。
正しい方法が何なのかは知らないです。
kazu> Q2) Emacs の time-zone を設定するのは、setenv() を使うべきなのでしょう
kazu> か? set-time-zone-rule() という関数があるようですが。
set-time-zone-rule<f>の存在をすっかり忘れていました。
きっとそちらを使うべきなのだろうと思います。
ただ、環境変数TZとの関連は調べとかないと、、、ということで、本来はsouce
を追うべきですが、Meadow 1.15 にて*scratch*で軽く試す限りは、以下の結果
が得られました。
1. (format-time-string "%z (%Z)" (current-time)) の値は(setenv "TZ" ...)
と (set-time-zone-rule ...)のうち、あとに実行した方の内容が効いて来ま
す。
2. (set-time-zone-rule ...)しても(getenv "TZ")の内容は変わらない。
3. (set-time-zone-rule nil)した場合、(getenv "TZ")の内容によらず、
TZが設定されていないときと同じ振る舞い。
>>>>> at Mon, 02 Sep 2002 22:43:22 +0900 (JST)
>>>>> kazu == Kazu Yamamoto (山本和彦) <kazu at example.com> said,
kazu> NetBSD では、システムの time-zone を変更した後で、
kazu> (set-time-zone-rule nil)
kazu> を実行すると、システムの time-zone に追従するようです。
kazu> Windows ではどうですか?
...ということで追従します。
ただし、一点、Windows固有の注意があります。Windowsではzone文字列を得る際
に、MSVC Run Time Libraryを使用しており、コイツがまたクセモノで、日本語
環境では"東京標準時"という漢字文字列を返します。しかも現在のEmacsはその
文字列をdecode せずに返してしまうという問題があります。
ex.
(progn
(set-time-zone-rule nil)
(format-time-string "%z (%Z)" (current-time)))
=> "+0900 (\223\214\213\236 (\225W\217\200\216\236))"
(progn
(set-time-zone-rule nil)
(decode-coding-string (format-time-string "%z (%Z)" (current-time))
'shift_jis))
=> "+0900 (東京 (標準時))"
そのため『TZを明示的に設定する』というのが日本語環境でNTEmacs/Meadowを使
う上でのFAQにもなっています。しかるに、(set-time-zone-rule nil) を利用す
るとなると、残念ながらこの問題が再浮上してしまいます。
# この問題は本来Emacs (NTEmacs/Meadow)本体が対応すべき問題で、以前
# current-time-zone<f>へのパッチを投げたのですが、その修正だけでは不十分
# でして、format-time-string<f> の処理には未だにこの問題が残っています。
## というか、POSIX的に正しくはどう振舞うべきか、を調べてないのでほったら
## かしてるだけなのですが。。。
--- Regards,
Shun-ichi Goto <gotoh at example.com>
R&D Group, TAIYO Corp., Tokyo, JAPAN
Mew-dist メーリングリストの案内