仕様が変わってたなんて知らなかったからしょうがない

とりあえず、流行のようなので使ってみました。> しょうがない
実際問題として、しょうがない、では済まないのです、失言も、プログラムも。

とあるシステムが、データにタイムスタンプをつけています。それはGMTの00:00:00からの2秒間隔のチックになっています。なので、丸一日で86400秒÷2=43200チックということになります。ということは、これは16bit幅の変数に収まるわけで、unsigned shortで扱うように、先人がコーディングしていました。

このタイムスタンプは、そのシステムから直接読むのではなく、ライブラリを通して読んでいるのですが、どこかの時点でこのライブラリの仕様が変更されていました。このタイムスタンプを直に返すのではなく、053210(05:32:10の場合。)のような数値として返すようになっていました。このため、二つの問題が生じました。

  1. タイムスタンプを実時間と比べて、データの賞味期限をチェックするときのタイムスタンプの処理。
  2. タイムスタンプを格納している変数幅
です。

前者は、あからさまに計算がおかしくなるので、すぐに気づきました。ts×2としていたものを t = (ts / 10000) * 3600 + ((ts / 100) % 100) * 60 + (ts % 100)としてやらねばならないわけです。
そして、運悪く、日本時間の 9:00-15:30とかだと、後者の問題は発覚しないので、(日本時間の9:00-15:30だと、GMTの00:00:00-06:30:00になるため、桁あふれしない。)見過ごしていました。 が、朝8時台にデータ処理の必要が生じて問題が発覚しました。最初は、08:59:42に235942が帰ってくるのを期待しているのに 39334なる謎の数字(謎じゃない。235942 % 65536 = 39334 典型的桁あふれ。)が現れて、どうなっているのか偉く悩みましたよ。桁あふれだと判ったときには、脱力しました。

ライブラリの仕様変更が、シモジモのものにまで通知されていなかったので、こういうオチとなりました。はぁ、丸々二日かかっちゃったよ、気づくまでに oTL