知識マップ: 業務アプリの和暦・祝日・締め日処理 ── 改元に強い設計とJapaneseCalendar・営業日計算の実務
記事「業務アプリの和暦・祝日・締め日処理 ── 改元に強い設計とJapaneseCalendar・営業日計算の実務」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
日本の業務アプリに特有の和暦・祝日・締め日は、いずれも「あとから変わる仕様」であり、コードではなくデータと変換層に隔離して設計するべきである。和暦はJapaneseCalendarに変換を任せて内部は西暦で統一し、改元への追従はOS更新に依存する一方、自前の元号ハードコードや和暦文字列での保存は改元のたびに取り残される。祝日は春分・秋分の確定時期や法改正・特別措置法で変わるため計算式では判定できず、内閣府CSVを取り込む祝日マスタと更新運用で持つ。締め日計算はAddMonthsの月末丸め仕様を理解したうえで、前回結果への累積を避け、基準日とDateTime.DaysInMonthから都度計算することでずれを防げる。
flowchart LR
accTitle: 和暦・祝日・締め日処理の知識マップ
accDescr: JapaneseCalendarによる和暦変換、内閣府CSVを使う祝日マスタ運用、AddMonthsの丸め仕様を踏まえた締め日計算という3つの日本特有の日付処理と、それぞれの落とし穴の関係を示す図
japanese_calendar_class["JapaneseCalendarクラス"]
holiday_master["祝日マスタ"]
closing_date_calculation["締め日計算"]
japanese_era["元号(和暦)"]
windows_update["Windows Update"]
first_year_as_number_switch["FormatJapaneseFirstYearAsANumberスイッチ"]
era_year_range_switch["EnforceJapaneseEraYearRangesスイッチ"]
invalid_wareki_date["存在しない和暦日付"]
era_hardcoding["元号のハードコード"]
wareki_string_storage["和暦文字列での保存"]
current_culture_user_override["CultureInfo.CurrentCultureのユーザーオーバーライド"]
wareki_data_contamination["保存データへの和暦混入"]
invariant_culture["CultureInfo.InvariantCulture"]
holiday_determination["祝日判定"]
holiday_hardcoding["祝日のハードコード"]
cabinet_office_holiday_csv["内閣府祝日CSV"]
substitute_holiday["振替休日"]
national_holiday_between["国民の休日"]
provisional_holiday_flag["暫定フラグ運用"]
business_day_calendar["営業日判定(BusinessDayCalendar)"]
company_holiday_master["会社休業日マスタ"]
addmonths_rounding["AddMonthsの月末丸め仕様"]
days_in_month["DateTime.DaysInMonth"]
recurring_addmonths_accumulation["AddMonthsの累積(前回結果への加算)"]
closing_date_drift["締め日のずれ(月末の連鎖崩れ)"]
fiscal_year["年度"]
japanese_calendar_class -->|"利用する"| japanese_era
japanese_calendar_class -.->|"前提とする"| windows_update
japanese_calendar_class -->|"で構成できる"| first_year_as_number_switch
japanese_calendar_class -->|"で構成できる"| era_year_range_switch
era_year_range_switch -.->|"軽減する"| invalid_wareki_date
era_hardcoding -->|"用いるのは非推奨"| japanese_era
wareki_string_storage -.->|"原因になり得る"| invalid_wareki_date
current_culture_user_override -.->|"原因になり得る"| wareki_data_contamination
invariant_culture -->|"防止する"| wareki_data_contamination
holiday_master -->|"推奨される対応"| holiday_determination
holiday_hardcoding -->|"用いるのは非推奨"| holiday_determination
holiday_master -.->|"利用する"| cabinet_office_holiday_csv
cabinet_office_holiday_csv -->|"前提とする"| invariant_culture
holiday_master -->|"利用する"| substitute_holiday
holiday_master -->|"利用する"| national_holiday_between
holiday_master -.->|"で構成できる"| provisional_holiday_flag
business_day_calendar -->|"利用する"| holiday_master
business_day_calendar -->|"利用する"| company_holiday_master
closing_date_calculation -->|"利用する"| addmonths_rounding
closing_date_calculation -->|"利用する"| days_in_month
closing_date_calculation -->|"利用する"| business_day_calendar
recurring_addmonths_accumulation -->|"原因になり得る"| closing_date_drift
recurring_addmonths_accumulation -->|"用いるのは非推奨"| closing_date_calculation
closing_date_calculation -->|"利用する"| fiscal_year
概念間の関係(全24件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- JapaneseCalendarクラスは元号(和暦)を利用します。
- JapaneseCalendarクラスはWindows Updateを前提とします。
- JapaneseCalendarクラスはFormatJapaneseFirstYearAsANumberスイッチで構成できます。
- JapaneseCalendarクラスはEnforceJapaneseEraYearRangesスイッチで構成できます。
- EnforceJapaneseEraYearRangesスイッチは存在しない和暦日付を軽減します。
- 元号のハードコードを元号(和暦)に用いることは推奨されません。
- 和暦文字列での保存は存在しない和暦日付の原因になることがあります。
- CultureInfo.CurrentCultureのユーザーオーバーライドは保存データへの和暦混入の原因になることがあります。
- CultureInfo.InvariantCultureは保存データへの和暦混入を防ぎます。
- 祝日マスタは祝日判定に対する本記事の推奨です。
- 祝日のハードコードを祝日判定に用いることは推奨されません。
- 祝日マスタは内閣府祝日CSVを利用します。
- 内閣府祝日CSVはCultureInfo.InvariantCultureを前提とします。
- 祝日マスタは振替休日を利用します。
- 祝日マスタは国民の休日を利用します。
- 祝日マスタは暫定フラグ運用で構成できます。
- 営業日判定(BusinessDayCalendar)は祝日マスタを利用します。
- 営業日判定(BusinessDayCalendar)は会社休業日マスタを利用します。
- 締め日計算はAddMonthsの月末丸め仕様を利用します。
- 締め日計算はDateTime.DaysInMonthを利用します。
- 締め日計算は営業日判定(BusinessDayCalendar)を利用します。
- AddMonthsの累積(前回結果への加算)は締め日のずれ(月末の連鎖崩れ)の原因になることがあります。
- AddMonthsの累積(前回結果への加算)を締め日計算に用いることは推奨されません。
- 締め日計算は年度を利用します。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。