Repository: LKI/chinese-calendar

Issue:
2015年 差一个假期
2015年有一个新增的”抗战胜利70周年纪念日“。那天全国都放假了。

http://www.gov.cn/zhengce/content/2015-05/13/content_9742.htm



Comments:

Patch:
diff --git a/chinese_calendar/constants.py b/chinese_calendar/constants.py
index 85b9ee5..54bc6fc 100644
--- a/chinese_calendar/constants.py
+++ b/chinese_calendar/constants.py
@@ -23,6 +23,9 @@ class Holiday(Enum):
     national_day = 'National Day', '国庆节', 3
     mid_autumn_festival = 'Mid-autumn Festival', '中秋', 1
 
+    # special holidays
+    anti_fascist_70th_day = 'Anti-Fascist 70th Day', '中国人民抗日战争暨世界反法西斯战争胜利70周年纪念日', 1
+
 
 holidays = {
     datetime.date(year=2006, month=1, day=1): Holiday.new_years_day.value,
@@ -277,6 +280,8 @@ holidays = {
     datetime.date(year=2015, month=5, day=1): Holiday.labour_day.value,
     datetime.date(year=2015, month=6, day=20): Holiday.dragon_boat_festival.value,
     datetime.date(year=2015, month=6, day=22): Holiday.dragon_boat_festival.value,
+    datetime.date(year=2015, month=9, day=3): Holiday.anti_fascist_70th_day.value,
+    datetime.date(year=2015, month=9, day=4): Holiday.anti_fascist_70th_day.value,
     datetime.date(year=2015, month=9, day=27): Holiday.mid_autumn_festival.value,
     datetime.date(year=2015, month=10, day=1): Holiday.national_day.value,
     datetime.date(year=2015, month=10, day=2): Holiday.national_day.value,
@@ -423,6 +428,7 @@ workdays = {
     datetime.date(year=2015, month=1, day=4): Holiday.new_years_day.value,
     datetime.date(year=2015, month=2, day=15): Holiday.spring_festival.value,
     datetime.date(year=2015, month=2, day=28): Holiday.spring_festival.value,
+    datetime.date(year=2015, month=9, day=6): Holiday.anti_fascist_70th_day.value,
     datetime.date(year=2015, month=10, day=10): Holiday.national_day.value,
     datetime.date(year=2016, month=2, day=6): Holiday.spring_festival.value,
     datetime.date(year=2016, month=2, day=14): Holiday.spring_festival.value,
diff --git a/chinese_calendar/scripts/data.py b/chinese_calendar/scripts/data.py
index fc2eee2..1c55b9f 100644
--- a/chinese_calendar/scripts/data.py
+++ b/chinese_calendar/scripts/data.py
@@ -30,6 +30,9 @@ class Holiday(Enum):
     national_day = 'National Day', '国庆节', 3
     mid_autumn_festival = 'Mid-autumn Festival', '中秋', 1
 
+    # special holidays
+    anti_fascist_70th_day = 'Anti-Fascist 70th Day', '中国人民抗日战争暨世界反法西斯战争胜利70周年纪念日', 1
+
 
 holidays = {}
 
@@ -120,6 +123,11 @@ class Arrangement(object):
 五、端午节：6月20日放假，6月22日（星期一）补休。
 六、中秋节：9月27日放假。
 七、国庆节：10月1日至7日放假调休，共7天。10月10日（星期六）上班。
+
+        注意：参见《国务院关于中国人民抗日战争暨世界反法西斯战争胜利70周年纪念日调休放假的通知》
+        http://www.gov.cn/zhengce/content/2015-05/13/content_9742.htm
+        额外的放假安排如下：
+        9月3日至5日调休放假，共3天。其中9月3日（星期四）放假，9月4日（星期五）调休，9月6日（星期日）上班。
         """
         self.year_at(2015) \
             .nyd().rest(1, 1).to(1, 3).work(1, 4) \
@@ -128,7 +136,8 @@ class Arrangement(object):
             .ld().rest(5, 1) \
             .dbf().rest(6, 20).rest(6, 22) \
             .maf().rest(9, 27) \
-            .nd().rest(10, 1).to(10, 7).work(10, 10)
+            .nd().rest(10, 1).to(10, 7).work(10, 10) \
+            .afd().rest(9, 3).to(9, 4).work(9, 6)
 
     def _2014(self):
         """ http://www.gov.cn/zwgk/2013-12/11/content_2546204.htm
@@ -360,6 +369,9 @@ class Arrangement(object):
     def maf(self):
         return self.mark(chinese_calendar.Holiday.mid_autumn_festival)
 
+    def afd(self):
+        return self.mark(chinese_calendar.Holiday.anti_fascist_70th_day)
+
     def mark(self, holiday):
         self.holiday = holiday
         return self


Test patch:
diff --git a/tests/test_holiday_amount.py b/tests/test_holiday_amount.py
index 56ea75c..f0ce0ff 100644
--- a/tests/test_holiday_amount.py
+++ b/tests/test_holiday_amount.py
@@ -21,6 +21,7 @@ class HolidayAmountTests(unittest.TestCase):
         holiday_amounts[2011] += 1  # 11年要补班12年的元旦假期
         holiday_amounts[2012] -= 1  # 12年可以享受11年补班的假
         holiday_amounts[2014] += 1  # 14年的节假日安排莫名少了一天
+        holiday_amounts[2015] -= 1  # 15年是中国人民抗日战争暨世界反法西斯战争胜利70周年，多放1天
         for year in range(2007, 2018 + 1):  # 06年数据少，不测了
-            self.assertEqual(11, holiday_amounts[year])
+            self.assertEqual(11, holiday_amounts[year], 'Holiday amount of year {}'.format(year))
         self.assertEqual(1, 1)