3月
04
アイマス2には、日付が変わると「なんで最近プロデュースしてくれないんですかー」みたいなメールが担当アイドルから届く(本来は30日間放置していると届く)というバグがあるらしいのですが、公式blogで細かい不具合内容と修正の配信についてアナウンスされました。ちなみに「らしい」と書いてあるのはDLCでメールアドレスを買わないとメールが来ないためです。私は買ってないので。
で、アナウンスによると「タイムゾーンが日本の場合、0時から9時までの間に起きる」ということなので、
- セーブデータの日付は、設定しているタイムゾーン(例えばJST)として計算する
- 現在の日付は、GMT(というかUTCか?)として計算する
- 日付の経過は符号なし整数で計算する
- 計算した結果が30日以上ならメール
という処理になっていると予想されます。
ここで、例えば4日の3時にセーブして続きをプレイすると、セーブデータの日付はJSTなので4日となりますが、現在の日付はGMTなので3日となります。符号付き整数で計算すると日付の経過は マイナス1日 ですが、符号なし整数で計算してしまうと(32bitだと仮定して) 4294967295日 になってしまい、30日を余裕で超えるのでメールが飛んできます。
また、恐らくタイムゾーンをGMTあるいはそれより西(アメリカとか)に設定している場合は、この不具合は顕在化しないでしょう。
ていうか素直に時刻を引き算して720時間以上だったらメールするようにしたら良かったのに…
こ、こんな理由なんでしょうか……ううむ。
推測された内容が正しいなら指摘内容もおっしゃるとおりで、
秒単位の計算でいいならUnix時間を採用すれば済む話ですよね。
ただ、時間の計算というのは最終的にOSに依存するので、
(依存しないようにすることも不可能ではありませんが、その場合全部自前で用意することになるでしょう)
Xboxの開発環境でどういう扱いになっているのかがわからないとなんとも言えないです。
XNAではランタイム自体が異なるので同じ議論はできないでしょうし。
いずれにせよ、早いところ修正されるといいんですけどね。
幸い、Xbox360ではアップデータを配信できるようですし。