Skip to content

Commit

Permalink
Merge pull request #33 from fumiyasac/feature/fix_for_2021
Browse files Browse the repository at this point in the history
2021年の祝祭日に関する変更対応&その他諸々の対応
  • Loading branch information
fumiyasac authored Dec 6, 2020
2 parents 2ed6ade + 2098e76 commit ee6013d
Show file tree
Hide file tree
Showing 15 changed files with 542 additions and 92 deletions.
2 changes: 1 addition & 1 deletion CalculateCalendarLogic.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|
s.name = "CalculateCalendarLogic"
s.swift_versions = '5.0'
s.version = "0.3.0"
s.version = "0.4.0"
s.summary = "This library CalculateCalendarLogic (sample project name is handMadeCalendarAdvance) can judge a holiday in Japan."
s.description = <<-DESC
This library 'CalculateCalendarLogic' can judge a holiday in Japan.
Expand Down
36 changes: 27 additions & 9 deletions CalculateCalendarLogic/CalculateCalendarLogic.swift
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ public struct CalculateCalendarLogic {
minute: 0,
second: 0,
nanosecond: 0)) else {
fatalError() // FIXME: throwにしたほうがよい?
fatalError("date is invalid.")
}
let weekdayNum = cal.component(.weekday, from: date) // 1:日曜日 ~ 7:土曜日

Expand All @@ -200,6 +200,12 @@ public struct CalculateCalendarLogic {
/// See also: http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
let SpecialProvisionYear = 2020

/// 「国民の祝日」の特例が2020年(平成32年12月2日)に公布・施行された。
/// 令和3年(2021年)に限り「海の日」は7月22日、「スポーツの日」は7月23日、「山の日」は8月8日となる。
/// ※ 国民の祝日に関する法律第3条第2項の規定に基づき、8月9日は休日となります。
/// See also: http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
let SpecialExtraProvisionYear = 2021

/// (注意)春分の日・秋分の日は1948年以前も祝祭日であったが、このカレンダーロジックの基準は1948年〜を基準とするので考慮しない
/// See also: https://ja.wikipedia.org/wiki/%E7%9A%87%E9%9C%8A%E7%A5%AD

Expand Down Expand Up @@ -306,29 +312,38 @@ public struct CalculateCalendarLogic {
case (year, 5, 6, _) where year >= AlternateHolidaysLawYear && getGoldenWeekAlterHoliday(year: year, weekday: weekday):
return true

//(1).7月20日(1996年から2002年まで)、(2).7月の第3月曜日(2003年から)、(3).7月23日(2020年のみ): 海の日
//(1).7月20日(1996年から2002年まで)、(2).7月の第3月曜日(2003年から)、(3).7月23日(2020年のみ)、(4).7月22日(2021年のみ): 海の日
case (1996...2002, 7, 20, _):
return true

case (year, 7, 15...21, .mon)
where 2003 <= year && year != SpecialProvisionYear:
where 2003 <= year && year != SpecialProvisionYear && year != SpecialExtraProvisionYear:
return true

case (SpecialProvisionYear, 7, 23, _):
return true


case (SpecialExtraProvisionYear, 7, 22, _):
return true

//7月21日: 海の日の振替休日
case (1996...2002, 7, 21, .mon):
return true

//(1).8月11日(2016年から)、(2).8月10日(2020年のみ): 山の日
//(1).8月11日(2016年から)、(2).8月10日(2020年のみ)、(3).8月8日(2021年のみ ※8月9日振替休日): 山の日
case (year, 8, 11, _)
where year > 2015 && year != SpecialProvisionYear:
where year > 2015 && year != SpecialProvisionYear && year != SpecialExtraProvisionYear:
return true

case (SpecialProvisionYear, 8, 10, _):
return true

case (SpecialExtraProvisionYear, 8, 8, _):
return true

case (SpecialExtraProvisionYear, 8, 9, .mon):
return true

//8月12日: 山の日の振替休日
case (year, 8, 12, .mon) where year > 2015:
return true
Expand Down Expand Up @@ -364,17 +379,20 @@ public struct CalculateCalendarLogic {
&& getAlterHolidaySliverWeek(year: year) && year > 2008:
return true

//(1).10月10日(1966年から1999年まで)、(2).10月の第2月曜日(2000年から)、(3).7月24日(2020年のみ): 体育の日(スポーツの日)
//(1).10月10日(1966年から1999年まで)、(2).10月の第2月曜日(2000年から)、(3).7月24日(2020年のみ)、(4).7月23日(2021年のみ): 体育の日(スポーツの日)
case (1966...1999, 10, 10, _):
return true

case (year, 10, 8...14, .mon)
where year > 1999 && year != SpecialProvisionYear:
where year > 1999 && year != SpecialProvisionYear && year != SpecialExtraProvisionYear:
return true

case (SpecialProvisionYear, 7, 24, _):
return true


case (SpecialExtraProvisionYear, 7, 23, _):
return true

//10月11日: 体育の日の振替休日
case (1966...1999, 10, 11, .mon):
return true
Expand Down
55 changes: 55 additions & 0 deletions CalculateCalendarLogicTests/CalculateCalendarLogicTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,61 @@ class CalculateCalendarLogicTests: XCTestCase {
// 勤労感謝の日: 2020年11月23日(月曜日)
(2020, 11, 23, true),

// 2021年
// 元日: 2021年1月1日(金曜日)
(2021, 1, 1, true),

// 成人の日: 2021年1月11日(月曜日)
(2021, 1, 11, true),

// 建国記念の日: 2021年2月11日(木曜日)
(2021, 2, 11, true),

// 天皇誕生日: 2021年2月23日(火曜日)
(2021, 2, 23, true),

// 春分の日: 2021年3月20日(土曜日)
(2021, 3, 20, true),

// 昭和の日: 2021年4月29日(木曜日)
(2021, 4, 29, true),

// 憲法記念日: 2021年5月3日(月曜日)
(2021, 5, 3, true),

// みどりの日: 2021年5月4日(火曜日)
(2021, 5, 4, true),

// こどもの日: 2021年5月5日(水曜日)
(2021, 5, 5, true),

// 海の日: 2021年7月22日(木曜日)
(2021, 7, 19, false),
(2021, 7, 22, true),

// スポーツの日: 2021年7月23日(金曜日)
(2021, 7, 23, true),
(2021, 10, 11, false),

// 山の日: 2021年8月8日(日曜日)
(2021, 8, 8, true),

// 振替休日: 2021年8月9日(月曜日)
(2021, 8, 9, true),
(2021, 8, 11, false),

// 敬老の日: 2021年9月20日(月曜日)
(2021, 9, 20, true),

// 秋分の日: 2021年9月23日(木曜日)
(2021, 9, 23, true),

// 文化の日: 2021年11月3日(水曜日)
(2021, 11, 3, true),

// 勤労感謝の日: 2020年11月23日(火曜日)
(2021, 11, 23, true),

// 2022年
// 元日: 2022年1月1日(土曜日)
(2022, 1, 1, true),
Expand Down
25 changes: 25 additions & 0 deletions Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
name: "CalculateCalendarLogic",
products: [
.library(
name: "CalculateCalendarLogic",
targets: ["CalculateCalendarLogic"]
)
],
targets: [
.target(
name: "CalculateCalendarLogic",
path: "CalculateCalendarLogic"
),
.testTarget(
name: "CalculateCalendarLogicTests",
dependencies: ["CalculateCalendarLogic"]
)
],
swiftLanguageVersions: [.v5]
)
21 changes: 17 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public func judgeJapaneseHoliday(year: Int, month: Int, day: Int) -> Bool {

### Installation

We can use this library with CocoaPods, Carthage, Manually.
We can use this library with CocoaPods, Carthage, Swift Package Manager, Manually.

##### Use CocoaPods

Expand All @@ -60,6 +60,11 @@ Create Carthage and specify it in your Cartfile:
github "fumiyasac/handMadeCalendarAdvance"
```

##### Use Swift Package Manager

Using Xcode, go to File -> Swift Packages -> Add Package Dependency and enter URL below:
https://github.com/fumiyasac/handMadeCalendarAdvance

##### Manually

Copy all the files in CalculateCalendarLogic/CalculateCalendarLogic.swift file into your project.
Expand Down Expand Up @@ -105,6 +110,7 @@ Special Thanks to
+ [econa77](https://twitter.com/econa77): Mac OS 10.10 Support
+ [essochi](https://github.com/essochi): Ver0.1.7
+ [myammm](https://github.com/myammm): Ver0.2.0
+ [kazuomatz](https://github.com/kazuomatz): Refactoring & Bugfix

and more iOS developers.

Expand Down Expand Up @@ -154,7 +160,7 @@ public func judgeJapaneseHoliday(year: Int, month: Int, day: Int) -> Bool {

### 導入方法

このライブラリはCocoaPods・Carthage及び手動での追加に対応しています
このライブラリはCocoaPods・Carthage・Swift Package Manager及び手動での追加に対応しています

##### CocoaPodsでの追加

Expand All @@ -181,6 +187,11 @@ github "fumiyasac/handMadeCalendarAdvance"

参考:[Carthageを使った外部ライブラリ導入方法](http://swift.swift-studying.com/entry/2015/09/23/215356)

##### Swift Package Managerでの追加

お使いのXcodeで「File -> Swift Packages -> Add Package Dependency」と進み、後述するURLを入力してEnterキーを押下して下さい。
https://github.com/fumiyasac/handMadeCalendarAdvance

##### 手動での追加

また手動でライブラリファイルを追加する場合には、`CalculateCalendarLogic.swift`ファイルをご自身のプロジェクトに追加して下さい。
Expand Down Expand Up @@ -220,7 +231,7 @@ print("2016年1月1日:\(result)")

現行プログラムでCalculateCalendarLogic.swiftで考慮したテストケースは下記の通りです。

+ 今年(2016年)の祝祭日の判定が正しく行えていること
+ 今年(2016年〜2022年)の祝祭日の判定が正しく行えていること
+ ゴールデンウィークの判定が正しく行えていること(※サンプル:2017年/2019年/2021年)
+ シルバーウィークの判定が正しく行えていること(※サンプル:2015年/2026年/2032年)
+ 春分の日・秋分の日の判定が正しく行えていること(※サンプル:2000年〜2030年)
Expand All @@ -235,7 +246,9 @@ print("2016年1月1日:\(result)")

まだまだ甘い部分があるかもしれませんが、その際はPullRequest等を送っていただければ幸いです。アプリ開発の中でこのサンプルが少しでもお役にたつ事ができれば嬉しい限りです。

+ 2019.12.02: Xcode12.2への対応/2021年の祝日に関する追加対応/サンプルコード修正等を行いました。
+ 2019.06.26: Swift5.0及びXcode10.2.1への対応を行いました。
+ 2019.01.23: 2019年の祝日に関する追加対応を行いました([kazuomatz](https://github.com/kazuomatz)様)。
+ 2018.12.02: Swift4.2及びXcode10への対応を行いました。
+ 2018.08.08: 2020年のカレンダーへの対応を行いました([myammm](https://github.com/myammm)様)。
+ 2018.07.04: Swift4.1及びXCode9.4への対応を行いました([essochi](https://github.com/essochi)様)。
Expand All @@ -251,5 +264,5 @@ print("2016年1月1日:\(result)")

### 謝辞

このライブラリの作成にあたり[akio0911](https://github.com/akio0911)さん、[akuraru](https://github.com/akuraru)さん、[keygx](https://github.com/keygx)さん、+ [econa77](https://twitter.com/econa77)さんに多くのお力添えを頂きまして誠にありがとうございました。
このライブラリの作成にあたり[akio0911](https://github.com/akio0911)さん、[akuraru](https://github.com/akuraru)さん、[keygx](https://github.com/keygx)さん、[econa77](https://twitter.com/econa77)さん、[kazuomatz](https://github.com/kazuomatz)さんに多くのお力添えを頂きまして誠にありがとうございました。
また、プルリクエスト等を定期的に頂けることで本当に助かっております。
26 changes: 23 additions & 3 deletions handMadeCalendarAdvance.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
DE7397041CCB4EC100A9A222 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DE7397021CCB4EC100A9A222 /* LaunchScreen.storyboard */; };
DE73970F1CCB4EC100A9A222 /* handMadeCalendarAdvanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE73970E1CCB4EC100A9A222 /* handMadeCalendarAdvanceTests.swift */; };
DE73971A1CCB4EC100A9A222 /* handMadeCalendarAdvanceUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE7397191CCB4EC100A9A222 /* handMadeCalendarAdvanceUITests.swift */; };
DEE369B4257C8A1600A22800 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEE369B3257C8A1600A22800 /* MainViewController.swift */; };
DEE369C3257C8E5A00A22800 /* DatePickerCalendarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEE369C2257C8E5A00A22800 /* DatePickerCalendarViewController.swift */; };
DEE369D1257CCD3400A22800 /* DisplayDateTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEE369D0257CCD3400A22800 /* DisplayDateTextField.swift */; };
E517AF4D1CE0F63C006847A0 /* CalculateCalendarLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = E517AF4C1CE0F63C006847A0 /* CalculateCalendarLogic.h */; settings = {ATTRIBUTES = (Public, ); }; };
E517AF541CE0F63C006847A0 /* CalculateCalendarLogic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E517AF4A1CE0F63C006847A0 /* CalculateCalendarLogic.framework */; };
E517AF5B1CE0F63C006847A0 /* CalculateCalendarLogicTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E517AF5A1CE0F63C006847A0 /* CalculateCalendarLogicTests.swift */; };
Expand Down Expand Up @@ -102,6 +105,9 @@
DE7397151CCB4EC100A9A222 /* handMadeCalendarAdvanceUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = handMadeCalendarAdvanceUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
DE7397191CCB4EC100A9A222 /* handMadeCalendarAdvanceUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = handMadeCalendarAdvanceUITests.swift; sourceTree = "<group>"; };
DE73971B1CCB4EC100A9A222 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
DEE369B3257C8A1600A22800 /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = "<group>"; };
DEE369C2257C8E5A00A22800 /* DatePickerCalendarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatePickerCalendarViewController.swift; sourceTree = "<group>"; };
DEE369D0257CCD3400A22800 /* DisplayDateTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayDateTextField.swift; sourceTree = "<group>"; };
E517AF4A1CE0F63C006847A0 /* CalculateCalendarLogic.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CalculateCalendarLogic.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E517AF4C1CE0F63C006847A0 /* CalculateCalendarLogic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CalculateCalendarLogic.h; sourceTree = "<group>"; };
E517AF4E1CE0F63C006847A0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
Expand Down Expand Up @@ -171,6 +177,7 @@
isa = PBXGroup;
children = (
DE0166BB1CDE5892002BB133 /* CalendarCell.swift */,
DEE369D0257CCD3400A22800 /* DisplayDateTextField.swift */,
);
name = Component;
sourceTree = "<group>";
Expand Down Expand Up @@ -205,8 +212,8 @@
isa = PBXGroup;
children = (
DE0166BA1CDE40DC002BB133 /* Component */,
DEE369BB257C8B5600A22800 /* ViewController */,
DE7396F91CCB4EC100A9A222 /* AppDelegate.swift */,
DE7396FB1CCB4EC100A9A222 /* MonthlyCalendarViewController.swift */,
DE7396FD1CCB4EC100A9A222 /* Main.storyboard */,
DE7397001CCB4EC100A9A222 /* Assets.xcassets */,
DE7397021CCB4EC100A9A222 /* LaunchScreen.storyboard */,
Expand All @@ -233,6 +240,16 @@
path = handMadeCalendarAdvanceUITests;
sourceTree = "<group>";
};
DEE369BB257C8B5600A22800 /* ViewController */ = {
isa = PBXGroup;
children = (
DEE369B3257C8A1600A22800 /* MainViewController.swift */,
DE7396FB1CCB4EC100A9A222 /* MonthlyCalendarViewController.swift */,
DEE369C2257C8E5A00A22800 /* DatePickerCalendarViewController.swift */,
);
name = ViewController;
sourceTree = "<group>";
};
E517AF4B1CE0F63C006847A0 /* CalculateCalendarLogic */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -587,9 +604,12 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
DEE369D1257CCD3400A22800 /* DisplayDateTextField.swift in Sources */,
DEE369C3257C8E5A00A22800 /* DatePickerCalendarViewController.swift in Sources */,
DE7396FC1CCB4EC100A9A222 /* MonthlyCalendarViewController.swift in Sources */,
DE7396FA1CCB4EC100A9A222 /* AppDelegate.swift in Sources */,
DE0166BC1CDE5892002BB133 /* CalendarCell.swift in Sources */,
DEE369B4257C8A1600A22800 /* MainViewController.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -703,7 +723,7 @@
SDKROOT = macosx;
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_VERSION = 4.2;
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
Expand Down Expand Up @@ -732,7 +752,7 @@
SDKROOT = macosx;
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 4.2;
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
uuid = "E9FE371E-F5FD-4AC0-947E-3E32C1A3FDD7"
type = "1"
version = "2.0">
</Bucket>
Loading

0 comments on commit ee6013d

Please sign in to comment.