-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathholiday.py
93 lines (68 loc) · 2.46 KB
/
holiday.py
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
88
89
90
91
92
93
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 10/25/2018 1:54 PM
# @Author : Aries
# @Site :
# @File : holiday.py
# @Software: PyCharm
print('中国')
# 自动查询节日 给定起始日期和结束日期,自动获取总共的节假日天数
import datetime
from dateutil import rrule, easter
try:
set
except NameError:
from sets import Set as set
# 复活节
def all_easter(start, end):
easters = [easter.easter(y) for y in xrange(start.year, end.year + 1)]
return [d for d in easters if start <= d <= end]
# 开始到结束的节礼日列表
def all_boxing(start, end):
one_day = datetime.timedelta(days=1)
boxings = [easter.easter(y) + one_day for y in xrange(start.year, end.year + 1)]
return [d for d in boxings if start <= d <= end]
# 返回开始和结束日期之间的圣诞节列表
def all_christmas(start, end):
christmases = [datetime.date(y, 12, 25) for y in xrange(start.year, end.year + 1)]
return [d for d in christmases if start <= d <= end]
# 返回劳动节列表
def all_labor(start, end):
labors = rrule.rrule(rrule.YEARLY, bymonth=9, byweekday=rrule.MO(1), dtstart=start, until=end)
return [d.date() for d in labors]
# 读取设定的节假日
def read_holidays(start, end, holidays_file='holidays.txt'):
try:
holidays_file = open(holidays_file)
except IOError as err:
print('open failed')
return []
holidays = []
for line in holidays_file:
if line.isspace() or line.startswith('#'):
continue
try:
y, m, d = [int(x.strip()) for x in line.split(',')]
date = datetime.date(y, m, d)
except ValueError:
print('Invalid line find')
continue
if start <= date <= end:
holidays.append(date)
holidays_file.close()
return holidays
holidays_by_country = {
'US': (all_easter, all_christmas, all_labor),
'IT': (all_easter, all_boxing, all_labor)
}
def holidays(cc, start, end, holidays_file='holidays.txt'):
all_holidays = read_holidays(start, end, holidays_file)
functions = holidays_by_country.get(cc, ())
for function in functions:
all_holidays += function(start, end)
all_holidays = list(set(all_holidays))
return (len(all_holidays), all_holidays)
test_file = open(r'D:\123.txt', 'w')
test_file.write('2014,3,23')
test_file.close()
print(holidays('US', datetime.date(2016, 1, 1), datetime.date(2016, 12, 31), r'D:\123.txt'))