python中关于日期的一些函数

自己封装了关于日期的两个函数,供需要时候使用

获取时间与当前日期比较

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
#!/usr/bin/env python3
# -*-coding: utf-8 -*-
"""
@author: kyle
@time: 2020/6/29 14:46
"""

import datetime


def diff_date(t_date):
"""
和当前日期比较
:param t_date: 待比较日期
:return:
"""
tmp_today = datetime.datetime.today()
today = tmp_today.date()

# 格式化,str转换成 datetime格式
tmp_date_reg = datetime.datetime.strptime(t_date, '%Y-%m-%d').date()

result = (tmp_date_reg - today).days

if result > 0:
return t_date + " 在未来"
elif result == 0:
return t_date + " 是今天"
else:
return t_date + " 在过去"


if __name__ == '__main__':
print(diff_date('2020-07-01'))

获取一段时间内所有节假日

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
#!/usr/bin/env python3
# -*-coding: utf-8 -*-
"""
@author: kyle
@time: 2020/6/4 11:05
"""

# 获取一段时间内所有节假日

# pip install chinesecalendar
import datetime
import chinese_calendar


def reg_date(t_date):
"""
格式化日期
:param t_date:
:return:
"""
return datetime.datetime.strptime(t_date, '%Y-%m-%d')


def get_holiday(start, end):
"""
返回指定时间区间内的节假日
:param start:
:param end:
:return:
"""
return chinese_calendar.get_holidays(reg_date(start), reg_date(end))


def get_holiday_no_weekends(start, end):
"""
返回指定时间区间内的节假日,不含周末
:param start:
:param end:
:return:
"""
return chinese_calendar.get_holidays(reg_date(start), reg_date(end), include_weekends=False)


def get_workday(start, end):
"""
返回指定时间区间内的工作日
:param start:
:param end:
:return:
"""
return chinese_calendar.get_workdays(reg_date(start), reg_date(end))


def judge_date(t_date):
"""
判断某个日期属于节假日还是工作日
:param t_date:
:return:
"""
# 格式化日期,获取该日期的年份
t_year = reg_date(t_date).year

# 获取节假日和工作日
holidays = get_holiday('{}-01-01'.format(t_year), '{}-12-31'.format(t_year))
# workdays = get_workday('{}-01-01'.format(t_year), '{}-12-31'.format(t_year))

# 判断属于节假日还是工作日
if datetime.date(reg_date(t_date).year, reg_date(t_date).month, reg_date(t_date).day) in holidays:
return str(t_date) + " 是节假日"
else:
return str(t_date) + " 是工作日"


if __name__ == '__main__':
print(judge_date('2020-06-28'))

获取指定区间内的所有日期

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
from datetime import datetime, timedelta


def reg_date(t_date):
"""
格式化日期
:param t_date:
:return:
"""
return datetime.strptime(t_date, '%Y-%m-%d')


def get_daterange(start, end):
# 格式化
start = reg_date(start)
end = reg_date(end)

delta = (end - start).days
res_date = [(start + timedelta(days=deltaday)).date() for deltaday in range(delta+1)]
# 输出结果转strpy
return [date.strftime('%Y-%m-%d') for date in res_date]


if __name__ == '__main__':
print(get_daterange('2020-05-01', '2020-06-02'))
dateTime = datetime.today().date()
print(dateTime.isoformat())

datetime格式转str

isoformat()

1
2
3
4
5
6
7
8
9
from datetime import datetime

dateTime = datetime.today().date()
r_date = dateTime.isoformat()
print(dateTime)
print(r_date)

print(type(dateTime))
print(type(r_date))

datetime.strftime

1
2
3
4
5
6
7
8
9
from datetime import datetime

dateTime = datetime.today().date()
r_date = dateTime.strftime('%Y-%m-%d')
print(dateTime)
print(r_date)

print(type(dateTime))
print(type(r_date))
文章目录
  1. 获取时间与当前日期比较
  2. 获取一段时间内所有节假日
  3. 获取指定区间内的所有日期
  4. datetime格式转str
    1. isoformat()
    2. datetime.strftime
|