受け取り希望の時間を、お客様に選んでもらう。「13:00」とか「16:30」とか。それを表計算シートに記録して、あとで通知に載せる。単純な話のはずだった。
ところが、シートから読み出した時間を通知に流すと、妙なものが出てくる。時刻の前に、見覚えのない古い日付がくっついている。百年以上前の、遠い昔の年。時刻だけを扱っているつもりが、いつのまにか日付になっていた。
「13:00」が、日付を連れてくる
シートのセルには、確かに時刻だけを入れていた。
画面で見ても、そこに並んでいるのは時刻だ。日付など、どこにも入力していない。なのに、プログラムで読み出すと、時刻ではなく、日付と時刻がセットになったものが返ってくる。しかもその日付は、自分では一度も打っていない、大昔の日付だった。
表計算は、基準の日を持っている
調べていくと、これは表計算ソフトの流儀だった。
時刻だけを入れたつもりでも、内部では「ある基準の日の、この時刻」として扱われる。基準になる日は、ずっと昔の、決められた一日。人の目には時刻しか見えないが、裏側では、その基準日に時刻をぶら下げた形で覚えている。
だから読み出すと、隠れていた基準日が一緒に出てくる。時刻だけを取り出したつもりが、日付つきの中途半端なものになっていた。
日付を捨てて、時刻だけ取り出す
直し方は、二つあった。
一つは、そもそも時刻を文字列として扱うこと。「13:00」という文字の並びとして持てば、裏に日付が忍び込む余地はない。もう一つは、読み出したあとで日付の部分を捨て、時と分だけを取り出して整えること。
今回は、読み出したものから時と分だけを拾い、「13:00」の形に組み直した。裏についてきた基準日は、使わずに落とす。これで、通知には時刻だけが、きれいに載るようになった。
見た目の型を、信じない
この件で、身についた警戒がある。
画面に時刻しか見えないからといって、中身も時刻だけだとは限らない。表計算ソフトは、人に見えないところで、日付や数値の都合を勝手に決める。見た目と、内部の持ち方は、しばしば食い違う。
だから、シートから読んだ値は、そのまま信じない。何の型で返ってきているのか、余計なものがくっついていないか、一度確かめる。見えているものと、実際に入っているものは、別だと思っておく。
便利な道具ほど、裏で気をきかせる
表計算ソフトは、よくできている。
数字を入れれば数として、日付らしきものを入れれば日付として、気をきかせて解釈してくれる。その親切が、たいていは助けになる。けれど、こちらの意図と違う解釈をされると、今回のような食い違いになる。
道具が気をきかせるほど、こちらは、それが何をしているかを知っておく必要がある。裏で何を補われているのかを分かったうえで使えば、親切は味方になる。分からないまま使うと、見えない日付に、そっと足をすくわれる。