MSX PLAYerの仮想フロッピーディスクファイルを操作するツールSAVListについて、前のバージョンでタイムスタンプのずれが直っていなかったので、再度修正することになったのだが、色気を出したがために苦労する羽目になった。
日本では夏時間がないので、MSX-DOS/MS-DOSのタイムスタンプとWindowsのタイムスタンプの相互変換をDosDateTimeToFileTime→LocalFileTimeToFileTime(MSX-DOS/MS-DOS→Windows)、FileTimeToLocalFileTime→FileTimeToDosDateTime(Windows→MSX-DOS/MS-DOS)といった具合にのんきにできるのだが、MSXは日本ローカルではないので、夏時間を考慮してみようと思ったらえらい目にあった。
LocalFileTimeToFileTime、FileTimeToLocalFileTime APIは変換対象のタイムスタンプではなく、稼働している時間を基準に夏時間を適用しているので、夏時間を適用している時に夏時間を適用していないときのタイムスタンプを変換しようとすると余計な夏時間適用が入るという困ったことになったので、やけに苦労した。ファイルのタイムスタンプ変換しようとしているのだからタイムスタンプを見て夏時間を適用すればよいのに、なんで関係ない動作している日を見て夏時間を適用するのだろうか。というか、夏時間の適用とUTCへの変換という違う目的の動作を何で一つのAPIにまとめるのだろうか。まったく、やれやれだ。
最後はネットワークから隔離してNTPによる時間合わせを受けない環境でタイムゾーンや日付をいじりまくって確認してようやくしっくりいく動作になったけど夏時間を使わないで生活している日本人にとって、夏時間を考えるというのは難しいものである。
さて、MSX-DOSにタイムゾーンの考え方はないので現地時間でタイムスタンプ書き込むときはUTCから変換して、夏時間のずれを適用しないようにしているけど、夏時間がある所でMSX-DOSを運用するときって夏時間なしでいいのだろうか。もしくは、夏時間を適用するときに限って内蔵時計ずらして使っているのだろうか。日本人の私にはわからないや。
MSX PLAYerも今どうなっているんだろう。私にはわからないや。