マクロサーバ timecountof の返り値No.01753
杉浦 まさき さん 98/09/23 01:08
 
ども、杉浦 まさき です。

その他秀シリーズの会議室の方にも書いたんですが、
 反応がないようなのでこちらにも書きます。

マクロサーバの timecountof の返す値がヘルプの記述に
 従っていないようなので、調査をお願いします。
 #例として 1980/01/01 0:0:0 のファイルを指定すると、
  負の値が返ってくるようですが…。
  ヘルプに従うと 0 が返ってくるはずですよね。


[ ]
RE:01753 マクロサーバ timecountof の返No.01768
秀丸担当 さん 98/09/28 18:42
 
>その他秀シリーズの会議室の方にも書いたんですが、
> 反応がないようなのでこちらにも書きます。
>
>マクロサーバの timecountof の返す値がヘルプの記述に
> 従っていないようなので、調査をお願いします。
> #例として 1980/01/01 0:0:0 のファイルを指定すると、
>  負の値が返ってくるようですが…。
>  ヘルプに従うと 0 が返ってくるはずですよね。

これは、ヘルプの記述が間違っていました。
現在返している値は、「DOS形式の日付と時刻」を32bitに割り当てたものです。

 上位ワード
  0〜4bit 日
  5〜8bit 月
  9〜15bit 1980年からの経過年数
 下位ワード
  0〜4bit 2で割った秒数
  5〜10bit 分
  11〜15bit 時

という値です。
次のバージョンを出すときには、ヘルプの記述を直すことにします。

それで、1980年1月1日 0:00:00 でおかしな値が返ってくるのは、
Windowsのバグか、日付を変えるソフトのか何かの問題と思われます。


[ ]
RE:01768 マクロサーバ timecountof の返No.01775
杉浦 まさき さん 98/09/29 00:58
 
ども、杉浦 まさき です。

>これは、ヘルプの記述が間違っていました。
>現在返している値は、「DOS形式の日付と時刻」を32bitに割り当てたものです。

そうでしたか…値を再現できなくて悩んだ日々もありましたが、
 自分のオツムのせいではないと分かって一安心です(^^;。


>それで、1980年1月1日 0:00:00 でおかしな値が返ってくるのは、
>Windowsのバグか、日付を変えるソフトのか何かの問題と思われます。

うーん、ちょっと調べてみます。


[ ]
RE:01775 マクロサーバ timecountof の返No.01782
杉浦 まさき さん 98/09/30 00:03
 
ども、杉浦 まさき です。

>>それで、1980年1月1日 0:00:00 でおかしな値が返ってくるのは、
>>Windowsのバグか、日付を変えるソフトのか何かの問題と思われます。
>うーん、ちょっと調べてみます。

…というわけで調べてみましたが、
 原因は多分以下のことだと推測されます。
 #違ってたらごめんなさいですm(_ _)m。

1)まず、入力した値は JST(日本標準時) で
  1980/01/01 00:00:00 というタイムスタンプを持つファイルで、
  これは UTC(世界標準時) だと 1979/12/31 15:00:00 (?) になる。
2)で、このファイル(のハンドル)を GetFileTime (or GetFileInformationByHandl
e)
  に渡して返ってくる FILETIME 構造体には、
  "UTC" での日付・時間を表す値が入っている。
3)この FILETIME 構造体を FileTimeToDosDateTime に渡そうとすると、
  1980/01/01 以前の日付なのでこの関数は失敗する(return FALSE)。
  この時、上記関数の 第2、第3引数は変更されない。
4)よって、最終的に表示される値は
  2つの WORD 変数の初期化時の値をそのまま合成したものになる。

結局問題は JST か UTC の
 どちらを採用するかということですが…
 個人的には今の方(UTC)がいいと思うので
 後の判断は作者にお任せします。


[ ]
RE:01782 マクロサーバ timecountof の返No.01788
秀丸担当 さん 98/10/01 19:16
 
>1)まず、入力した値は JST(日本標準時) で
>  1980/01/01 00:00:00 というタイムスタンプを持つファイルで、
>  これは UTC(世界標準時) だと 1979/12/31 15:00:00 (?) になる。

なるほど。たぶんこれです。
するどいですね。
1980/01/01 00:00:00 にしたらエクスプローラの日付表示が消えたので
バグかと思ってしまいました。

[ ]