#!/usr/bin/python3.7
# -*- coding: utf-8 -*-
# @Time : 2019/7/4 14:39
# @Author: Jtyoui@qq.com
import datetime
import re
[文档]def plus_date(start: str, end: str, format_='%Y-%m-%d %H:%M:%S') -> datetime:
"""两个日期相减得差数 :end-start
:param start: 一个正确的日期
:param end: 另一个正确的日期
:param format_: 日期格式化
:return: 被加后的日期
"""
if '%H:%M:%S' in format_:
if ':' not in start: start += ' 00:00:00'
if ':' not in end: end += ' 00:00:00'
start = datetime.datetime.strptime(start, format_)
end = datetime.datetime.strptime(end, format_)
plus = end - start
return plus
[文档]def add_day(date: str, format_='%Y-%m-%d', to_str=False, **kwargs) -> datetime:
"""一个日期加多少天或者时间
:param date: 一个正确的日期
:param format_: 日期格式化
:param to_str: 是否打印字符串
:param kwargs: 可以填写 :days=xx,seconds=xx,microseconds=xx,milliseconds=xx,minutes=xx,hours=xx,weeks=xx
:return: 被加后的日期
"""
start = datetime.datetime.strptime(date, format_)
end = datetime.timedelta(**kwargs)
if to_str:
add = start + end
return add.strftime(format_)
return start + end
[文档]def check_date_type(date_str: str) -> (bool, datetime):
"""验证数字字符串是否日期类型:例如 2018-2-1
:param date_str: 日期类型 例如 2019-2-1,返回真、2019-2-29 返回假(2019年没有2月29号)。
:return: 返回元组,(真、datetime类型)、(假、None)
"""
try:
p = "[!#$%&*+,-./:;=?@^_` |~年月日号点分秒]"
data = []
for r in re.split(p, date_str):
if r and isinstance(r, str):
data.append(int(r))
d = datetime.datetime(*data)
return True, d
except:
return False, None
if __name__ == '__main__':
p = plus_date(start='2018-02-01', end='2018-01-01')
print(p.days)
print(add_day(date='2018-02-28', days=1, to_str=True))
print(check_date_type('2018-2-28 23:00:00'))
print(check_date_type('2018/2/1'))
print(check_date_type('2018年2月1日14点15分20秒'))