日付配列生成クラスを作る

投稿者: | 2016年3月3日

今度は日付配列の生成処理をクラス化してみましょうか。

配列を生成すべき年月を与えられたら、49個(曜日表示+日曜始まり7日6週分)の配列内に日付データとそれぞれの日付の属性値(今日だとか休日だとか)を返します。今日かどうかの判定はコードの実行日を使用します。

1日が火曜日で今日が3日の場合、こんなイメージ。(土日休み)

monthlySequence: [(day: Int, status: Int)] = [(-7, 66), (-6, 64), (-5, 64), (-4, 64), (-3, 64), (-2, 64), (-1, 66), (0, 2), (0, 0), (1, 0), (2, 0), (3, 1), (4, 0), (5, 2), (6, 2), ... ]

曜日表示は日付データに負の値を入れて、今月の日付に整数値を入れます。先月とか来月の日付情報は不要なので0です。属性値は7ビット情報で、次のような感じ。

上位9
ビット
第6
ビット
第5
ビット
第4
ビット
第3
ビット
第2
ビット
第1
ビット
第0
ビット
用途 予約曜日
フラグ
翌年
フラグ
前年
フラグ
翌月
フラグ
前月
フラグ
休日
フラグ
本日
フラグ
1未定曜日翌年前年翌月前月休日本日
0未定日付今年今年今月今月平日その他

同様に週表示の場合は14個(曜日表示+日曜始まりの7日分)の配列内に月表示と同様の値を返します。ただし週表示配列は年と週番号から生成されます。

2016年3月3日週はこうなります。(土日休み)

weeklySequence: [(day: Int, status: Int)] = [(-7, 66), (-6, 64), (-5, 64), (-4, 64), (-3, 64), (-2, 64), (-1, 66), (28, 6), (29, 4), (1, 0), (2, 0), (3, 1), (4, 0), (5, 2)]

7ビットの属性値のうち第2ビットから第6ビットまでは週表示配列のみに適用します。

とりあえず最低限の処理として、ひと月分または今週分の日付数列を曜日に合わせて配置し、今日の要素にマークをつけてみましょう。こんな仕様になりそうです。

クラス名:DateSequence

月配列生成メソッド名:getMonthly(targetYear: Int, targetMonth: Int)
出力プロパティ名:

  • monthlySequence: [(day: Int, status: Int)]…日曜始まりの要素数49のタプルの配列
  • monthlyYear: Int…月配列の年
  • monthlyMonth: Int…月配列の月

週配列生成メソッド名:getWeekly(targetYear: Int, targetWeek: Int)
出力プロパティ名:

  • weeklySequence: [(day: Int, status: Int)]…日曜始まりの要素数14のタプルの配列
  • weeklyYear: Int…週配列の年
  • weeklyMonth: Int…週配列の月
  • weeklyWeek: Int…週配列の週番号
  • currentDayOfYear: Int…実行日の年初からの日数
  • currentTotalDays: Int…実行日を含む年の年間日数

各プロパティ詳細:

  • monthlySequence[].dayやweeklySequence[].dayには日付が入る。月カレンダーの場合は月初から月末までの日付。先月と来月は0。週カレンダーの場合は週初から週末までの日付。先月または来月を含む時はその日付。
  • monthlySequence[].statusやweeklySequence[].statusは対応するdayの値の7ビット情報。休日フラグと曜日フラグは未実装。

次回はテスト仕様を考えてみます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です