このアプリは平日/休日のダイヤに対応している。休日がそれ以上(土曜/日曜/祝日)に分かれている場合には未対応である。
1.対象とする休日 参考
1.1.週で決定されている休日
01/02週の月曜 (成人の日)
07/03週の月曜 (海の日)
09/03週の月曜 (敬老の日)
10/02週の月曜 (体育の日)
1.2.日付が決定されている休日
01/01 (元日)
04/29 (みどりの日)
05/03 (憲法記念日)
05/04 (間にあるので)
05/05 (こどもの日)
11/03 (文化の日)
11/23 (勤労感謝の日)
12/23 (天皇誕生日)
03/21 (春分日→初期値)
09/23 (秋分日→初期値)
12/32 (元旦→プログラムの便宜上定義してるだけ)
02/11 (建国記念日)
1.3.春分日/秋分日 参考
春分,秋分は2年分しか決定されていない。そこで次のように推測する。
2012年→秋分の日を9/22、春分の日を3/20
2004年、2005年、2008年、2009年、2013年→春分の日を3/20
国立天文台のものを参考として2015年まで検討している。
アプリでは、起動時(お待ちください画面)対象年の祝日を決定しているため、
4ヶ月起動しっぱなしだと狂う可能性がある。(年末起動→越年→春分の日)
2.休日アルゴリズム
2.1.比較する日付を取得
当日の終電が過ぎたならば、明日の日付を対象とする
2.2.日付で決定されている休日
2.1と1.2.の月と日が合致すれば休日
2.2.日付で決定されている休日の振替休日
2.1が月曜であり、2.1の月と1.2の月が同じで、2.1の日=1.2の日+1、なら休日
2.3.週で決定されている休日
2.1が月曜の場合に処理を行う。
2.1の月と1.2の月が同じで、1.2の週=(2.1の日+6)/7、なら休日
→後半の式は「1週=1~7日、2週=8~14日、3週=15~21日」と同義。
月曜と決まっていればそう決定できる。
2.4.土日
2.1が土曜もしくは日曜であれば休日
3.実装上の備考
3.1.土日
このアプリはJAVAなので、Calendarクラスを使用している。
曜日の取得は、get(Calendar.DAY_OF_WEEK)を使用していて、
Calendar.SUNDAY~Calendar.SATURDAY=1~7としている。
万が一、別の数値を使った実装上だと動かない。
3.2.「当日」の定義
3:00~26:59を当日とする。
つまり、始発は3:00より後であり、
終電は26:59より前でなくてはならない。
最近のコメント