This repository was archived by the owner on Apr 4, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathcalendars_jp.jl
87 lines (83 loc) · 3.6 KB
/
calendars_jp.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#####
# Type declarations
#####
abstract type JPFCalendar <: SingleFCalendar end
struct JPTOFCalendar <: JPFCalendar end
#####
# Methods
#####
function isnewyearsholiday(dt::TimeType, c::JPFCalendar)
dayofyear(dt) == 1
end
function isbankholiday(dt::TimeType, c::JPFCalendar)
((month(dt) == Jan && day(dt) in [2, 3]) ||
month(dt) == Dec && day(dt) == 31)
end
function iscomingofageholiday(dt::TimeType, c::JPFCalendar)
((dayofweekofmonth(dt) == 2 && dayofweek(dt) == Mon && month(dt) == Jan &&
year(dt) >= 2000) ||
((day(dt) == 15 || (day(dt) == 16 && dayofweek(dt) == Mon)) &&
month(dt) == Jan && year(dt) < 2000))
end
function isfoundationdayholiday(dt::TimeType, c::JPFCalendar)
((day(dt) == 11 || (day(dt) == 12 && dayofweek(dt) == Mon)) &&
month(dt) == Feb)
end
function isshowadayholiday(dt::TimeType, c::JPFCalendar)
((day(dt) == 29 || (day(dt) == 30 && dayofweek(dt) == Mon)) &&
month(dt) == Apr)
end
function ismayholiday(dt::TimeType, c::JPFCalendar)
# Constitution, Greenery & Children's days
month(dt) == May && (day(dt) in 3:5 || (day(dt) == 6 &&
dayofweek(dt) in [Mon, Tue, Wed]))
end
function ismarinedayholiday(dt::TimeType, c::JPFCalendar)
(month(dt) == Jul && (year(dt) >= 2003 && dayofweek(dt) == Mon &&
dayofweekofmonth(dt) == 3) || (year(dt) < 2003 && (day(dt) == 20 ||
(day(dt) == 21 && dayofweek(dt) == Mon))))
end
function isrespectforagedholiday(dt::TimeType, c::JPFCalendar)
(month(dt) == Sep && ((dayofweek(dt) == Mon && dayofweekofmonth(dt) == 3 &&
year(dt) >= 2003) || (day(dt) == 15 || (day(dt) == 16 &&
dayofweek(dt) == Mon)) && year(dt) < 2003))
end
function iscitizensdayholiday(dt::TimeType, c::JPFCalendar)
(year(dt) >= 2003 && month(dt) == Sep && dayofweek(dt) == Tue &&
dayofweekofmonth(dt) == 3 && isseasonstart(dt + Day(1), Sep))
end
function isseasonstartholiday(dt::TimeType, c::JPFCalendar)
# Vernal & autumnal equinoxes (both Mondayised)
((isseasonstart(Date(dt), Mar) || # Sunday is mondayised
(dayofweek(dt) == Mon &&
(Date(dt) == seasonstart(Date(dt), Mar) + Day(1)))) ||
(isseasonstart(Date(dt), Sep) || # Sunday is mondayised
(dayofweek(dt) == Mon &&
(Date(dt) == seasonstart(Date(dt), Sep) + Day(1)))))
end
function ishealthandsportsdayholiday(dt::TimeType, c::JPFCalendar)
(month(dt) == Oct && ((year(dt) >= 2000 && dayofweek(dt) == Mon &&
dayofweekofmonth(dt) == 2) || (year(dt) < 2000 && (day(dt) == 10 ||
day(dt) == 11 && dayofweek(dt) == Mon))))
end
function isculturedayholiday(dt::TimeType, c::JPFCalendar)
month(dt) == Nov && (day(dt) == 3 || (day(dt) == 4 && dayofweek(dt) == Mon))
end
function islabourdayholiday(dt::TimeType, c::JPFCalendar)
(month(dt) == Nov && (day(dt) == 23 ||
(day(dt) == 24 && dayofweek(dt) == Mon)))
end
function isemperorsbirthdayholiday(dt::TimeType, c::JPFCalendar)
(month(dt) == Dec && (day(dt) == 23 ||
(day(dt) == 24 && dayofweek(dt) == Mon)))
end
function isgood(dt::TimeType, c::JPFCalendar)
# http://en.wikipedia.org/wiki/Public_holidays_in_Japan
!(isweekend(dt) || isnewyearsholiday(dt, c) || isbankholiday(dt, c) ||
iscomingofageholiday(dt, c) || isfoundationdayholiday(dt, c) ||
isseasonstartholiday(dt, c) || isshowadayholiday(dt, c) ||
ismayholiday(dt, c) || ismarinedayholiday(dt, c) ||
isrespectforagedholiday(dt, c) || iscitizensdayholiday(dt, c) ||
ishealthandsportsdayholiday(dt, c) || isculturedayholiday(dt, c) ||
islabourdayholiday(dt, c) || isemperorsbirthdayholiday(dt, c))
end