カレンダー

2023/06
    
 
       

広告

Twitter

記事検索

ランダムボタン

public int GetSchoolTerm(int timestamp);

by 唐草 [2023/06/29]



 生年月日や申請日を書くとき、平成や令和といった元号ではなく西暦で記入することが多くなってきた。情報を電子化する際、同じ情報を複数の方法で示せるのは厄介で非合理。示し方を1つに絞る必要があり、それに西暦が選ばれるのは当然の流れだ。
 この変化は、システム開発をしているぼくにはありがたい。西暦だけに対応すればいいので仕事が楽になった。
 元号は過去のものになったが、だからといってコンピューターの示す時計をそのまま使えるわけではない。日本のスケジュールは年度に支配されているからだ。元号ほど厄介ではないけれど、年度も曲者だ。
 学校の情報を扱うプログラムを書いていると、年度からは逃れられない。ぼくの作った教育関連プログラムには年度を取得する関数が用意されている。仕組みは単純。指定した日付が1月から3月の間だったら、西暦から1を引いた値を返すだけ。
 学校のカレンダーは年度に支配されているが、それだけが特徴ではない。年度と並ぶもう1つの特徴は学期だ。ぼくのプログラムには年度を取得する関数とセットで学期を取得する関数も定義されている。
 仕組みは年度を返す関数と同じで、指定した日付の「月」を確認して該当する「期」を返すだけ。あくまで月を確認しているだけだった。
 先日、「8月16日以降を後期にしたい」という要望が来た。技術的には条件分岐が少し増えるだけ。4-7月なら前期、1-3月と9-12月なら後期と返す。そして8月の場合のみ「日」を確認して、15日までなら前期、それ以降なら後期と返す。人間的な方法で実装した。
 しかし、納品が済んだ今になってこの方法はエレガントでなかったと反省している。月と日を用いて判定をするのは、人間的で無駄が多い。
 コンピュータのカレンダーには、ydayとも呼ばれる年間通算日という値がある。「春も近づく八十八夜」的な数え方だ。人間には扱いにくいが、これを使えば1つの要素を判定するだけで前期か後期か分かる。
 ぼくの頭はコンピューターに最適化されていないということがまたしても明らかになった。
 ちなみに8/15をydayで示すと今年は226。