テンプレートの $(FormatDate...No.11162
まいふぇろう さん 03/02/04 20:29
 
ちょっと困った(非常に驚いた)問題がおきました。御指導下さい。
私は、返信テンプレートに以下のものを入れてます。
$(SetNameOnly,$(RootHeader,From))$- wrote, $(FormatDate,$(RootHeader,Date),"
YYYY/M/D  h:m") ...$z

本日、こういうDate:のメールを受け取って返信したところ、
Date: Tue, 04 Feb 2003 03:37:42 +0000

xxxxxx wrote, 2003/2/4 12:37 ... ←うっひゃぁ!こっちの現地
時間になってしまった!これは相手にとんでもなく失礼。

となってしまいました。
私が期待するのは(今までずっと当たり前だと思っていた、という
よりどのメールソフトもそうだった)、

xxxxxx wrote, 2003/2/4 03:37 ... ←相手の現地時間、つまり相
手がメールを書いた時刻を相手に示す

なのですが、こうする方法はありますか?

ちなみに、相手は外国に住む日本人です。こちらとしては、日本の
慣習で問題ないのです。
↓これはキライです。日本人にはわかりにくい...
xxxxxx wrote, Tue, 04 Feb 2003 03:37:42 +0000 ...

[ ]
RE:11162 テンプレートの $(FormatDate...No.11172
たまがわ さん 03/02/05 01:38
 
まいふぇろうさん、こんばんは。

 ちょっと乱暴なアイデアですが、私が思いつくのは、以下のようなマクロを用意し、
テンプレートのところに「$(ExecMacro,"date.mac")$-」とだけ書いておくという方
法です。(タイムゾーンを偽装しています)
 もっとエレガントな方法があるんじゃないかと思うんですけど分かりませんでした。

//date.mac
loaddll "TKInfo.dll";
insert dllfuncstr("SetNameOnly", dllfuncstr("RootHeader", "From"))+" wrote, ";
insert dllfuncstr("FormatDate", leftstr(dllfuncstr("RootHeader", "Date"), 2
4)+" +0900", "YYYY/MM/DD hh:mm") + "\n";
insert dllfuncstr("QuotedRootBody") + "\n";

[ ]
RE:11172 テンプレートの $(FormatDate...No.11174
まいふぇろう さん 03/02/05 07:57
 
たまがわさん、いつもアドバイスありがとうございます。
なるほど、その方法で、
日本国内用(+0900)
アメリカ出張用(-0700)
オランダ出張用(+0100)
とか、いろいろ作っておけばいいわけですね。

もうちょっと研究してみます。

[ ]
RE:11172 テンプレートの $(FormatDate...No.11175
ながさわ さん 03/02/05 09:13
 
こんにちは、ながさわです。

> もっとエレガントな方法があるんじゃないかと思うんですけど分かり
>ませんでした。

エレガントな方法ってコトで考えたんですけど、メールのタイムゾーンやら、シ
ステムのタイムゾーンやらを得る方法がないような気がしたので、無理かな?

って、コトで。便乗ですが、tkinfo.dllに

RootTimeZone

とか

GetSystemTimeZone

とか、追加してもらうことも。返値は符号付き整数で-2400〜+2400、確か±1300
でOKだった気もしますが。後者は、環境変数TZが設定されていれば、それを見る
手もありますが、コントロールパネルでしか設定していない(というか、設定画
面を知らない人も)いるでしょうし、set TZ=JSTとかだと、その変換も必要です
し。
鶴亀内部では、同等のロジックが存在していると思うのですが……。(それとも
WinAPIのサービスにあるのか?)

[ ]
RE:11174 テンプレートの $(FormatDate...No.11181
たまがわ さん 03/02/05 10:09
 
>たまがわさん、いつもアドバイスありがとうございます。
>なるほど、その方法で、
>日本国内用(+0900)
>アメリカ出張用(-0700)
>オランダ出張用(+0100)
>とか、いろいろ作っておけばいいわけですね。

 いえ、このままでいいんじゃないかと思います。タイムゾーンを日本であるかのよ
うに装って時差計算をさせないようにし、現地時間を直接挿入させようとしているつ
もりで考えたんです。(私が勘違いしているかな?)
 メールリストの日時表示の方は、日本時間に換算されるのでこれとは食い違いが生
じますし、確かに自分が外国にいるときには、さらに頭がこんがらがりますね。

[ ]
RE:11181 テンプレートの $(FormatDate...No.11182
たまがわ さん 03/02/05 10:24
 
> メールリストの日時表示の方は、日本時間に換算されるのでこれとは食い違いが
>生じますし、確かに自分が外国にいるときには、さらに頭がこんがらがりますね。

 自分が外国にいるときは、windowsのタイムゾーンも設定し直すということを忘れ
ていました。
 おっしゃるとおり、自分のいる国に合わせて作る必要がありそうです。失礼いたし
ました。

[ ]
RE:11175 テンプレートの $(FormatDate...No.11185
たまがわ さん 03/02/05 11:01
 
ながさわさん、こんにちは。

> 鶴亀内部では、同等のロジックが存在していると思うのですが……。

 「FormatDate」関連に、直接日時と換算日時を切り換えるスイッチ・パラメータが
あれば、テンプレートだけで処理できますし、簡単に済ませられていいかもしれませ
ん。(難しいことは鶴亀内部で考えてもらうという、ずぼらな方向性ですいません)
 スイッチ・パラメータを省略可にすれば互換性もとれるような気がします。

[ ]
RE:11185 テンプレートの $(FormatDate...No.11197
秀まるお2 さん 03/02/05 16:02
 
 んでは、FormatDateの第2パラメータの先頭に"o"が付いてるかどうかで、ス
イッチすることにします。

 例えば、"YYYY/MM/DD"と指定する所を"oYYYY/MM/DD"のように指定するという
形です。

 そうすると、タイムゾーン関係の変換を一切無視して日付文字列を計算します。
ローカルのタイムゾーンも見ないし、メール中に入っている「+0900」などのタ
イムゾーン情報も見ないで処理します。

 でいいと思いますが…。

 間違ってたらご指摘ください。

[ ]
RE:11197 テンプレートの $(FormatDate...No.11204
まいふぇろう さん 03/02/05 16:59
 
> 例えば、"YYYY/MM/DD"と指定する所を"oYYYY/MM/DD"のように指定す> るという形
>です。

それで結構だと思います。うれしいです。

ところで、 $(FormatDateでも、以下のパラメータが使えてしまう
ようですが、非公式ですか?(ヘルプには書かれていないようです)

EM月を英語3文字で(Jan、Feb、Mar、…)
EW何曜日かを英語3文字で(Sun、Mon、Tue、…)
i午前か午後かを、「AM」または「PM」のような形式で
j午前か午後かを、「午前」または「午後」のような形式で
k時を12時間単位で(例えば午後2時なら14ではなく、2を返す)

[ ]
RE:11204 テンプレートの $(FormatDate...No.11205
秀まるお2 さん 03/02/05 17:07
 
>ところで、 $(FormatDateでも、以下のパラメータが使えてしまう
>ようですが、非公式ですか?(ヘルプには書かれていないようです)

 単にヘルプの記載漏れです。これまた修正します。

[ ]
RE:11175 テンプレートの $(FormatDate...No.11222
アルビレオ さん 03/02/06 04:06
 
アルビレオです。

>エレガントな方法ってコトで考えたんですけど、メールのタイムゾーンやら、シ
>ステムのタイムゾーンやらを得る方法がないような気がしたので、無理かな?

レジストリから取得できるはずと考えたので調べてみました。

openreg "LOCALMACHINE","\\System\\CurrentControlSet\\Control\\TimeZoneInform
ation";
#TimeZone = getregnum("ActiveTimeBias");

で、分単位の値が取得できます。
日本なら 0xfffffded = -540分 =- 9時間 です。
Windows 95,98,ME,NT,2000,XPすべて共通でした。
参考:http://perso.wanadoo.fr/tmcd2/Country.htm#Fuseau horaire

[ ]
RE:11222 テンプレートの $(FormatDate...No.11253
ひろ さん 03/02/06 18:20
 
 アルビレオさん今日は、ひろです。
> #TimeZone = getregnum("ActiveTimeBias");
 バイナリなので、取得できないのでは?


[ ]