一、convert_helper.py
在common文件夹下面建立convert_helper.py文件。
convert_helper.py是类型转换包,所有字符串转数值、字符串转日期、字符串日期转时间戳等各种类型转换函数,都可以放到这里来。
8 | ############################################# |
10 | ############################################# |
12 | "" "将字符串安全转换为int类型,转换失败时默认值为0" "" |
20 | "" "将字符串安全转换为int类型,当int值小于0时,返回0" "" |
23 | # 判断转换后的结果值是否小于0,是的话返回0 |
24 | if not result or result < 0: |
31 | "" "将字符串安全转换为int类型,当int值小于1时,返回1" "" |
34 | # 判断转换后的结果值是否小于1,是的话返回1 |
35 | if not result or result < 1: |
42 | "" "将字符串安全转换为float类型" "" |
52 | return decimal.Decimal(text) |
57 | ############################################# |
59 | ############################################# |
67 | 1: "%Y-%m-%d %H:%M:%S.%f" , |
69 | 3: "%Y-%m-%d %H:%M:%S" , |
73 | if str(text).find( '.' ) > -1: |
74 | return datetime.datetime. strptime (text, time_dict[1]) |
76 | time_list = text.split( ':' ) |
77 | return datetime.datetime. strptime (text, time_dict[len(time_list)]) |
79 | return datetime.datetime. strptime (text, "%Y-%m-%d" ) |
91 | def to_timestamp10(text): |
92 | "" "将时间格式的字符串转化为长度为10位长度的时间戳" "" |
95 | return int(d.timestamp()) |
100 | def to_timestamp13(text): |
101 | "" "将时间格式的字符串转化为长度为13位长度的时间戳" "" |
102 | d = to_datetime(text) |
104 | return int(d.timestamp() * 1000) |
比如说字符转int函数
2 | "" "将字符串安全转换为int类型,转换失败时默认值为0" "" |
在日常使用当中,经常会要求数值不能小于0或小于1,而to_int()函数转换时,用户如果输入了负数,虽然转换成功了,但这个值却不是我们想要的结果,如果每次都要加上一段代码对值进行判断,那会更加麻烦,所以进行了再次封装,多出来to_int0()和to_int()1两个函数。
2 | "" "将字符串安全转换为int类型,当int值小于0时,返回0" "" |
5 | # 判断转换后的结果值是否小于0,是的话返回0 |
6 | if not result or result < 0: |
13 | "" "将字符串安全转换为int类型,当int值小于1时,返回1" "" |
16 | # 判断转换后的结果值是否小于1,是的话返回1 |
17 | if not result or result < 1: |
to_datetime()函数,会根据输入的日期字符串格式,转换成对应的日期(如:2017-09-01)、日期时间(2017-09-01 11:11)、日期时分秒(2017-09-01 11:11:11)、日期时分秒毫秒类型(2017-09-01 11:11:11.111),得到的值是datetime类型
1 | def test_to_datetime(self): |
2 | print ( '---test_to_datetime---' ) |
3 | print (convert_helper.to_datetime(None)) |
4 | print (convert_helper.to_datetime( '' )) |
5 | print (convert_helper.to_datetime( 'xxx' )) |
6 | print (convert_helper.to_datetime( '2017-09-01' )) |
7 | print (convert_helper.to_datetime( '2017-09-01 11:11' )) |
8 | print (convert_helper.to_datetime( '2017-09-0111:11' )) |
9 | print (convert_helper.to_datetime( '2017-09-01 11:11:11' )) |
10 | print (convert_helper.to_datetime( '2017-09-01 11:11:11.111' )) |
二、datetime_helper.py
这个日期函数操作包,这个包里的函数类型主要有两大类,一种是日期类型转换,将日期类型格式化为字符串类型或转换为数值类型;另一种是对日期类型的比较或运算。
10 | if isinstance(dt, datetime.datetime): |
11 | return dt. strftime ( '%Y-%m-%d' ) |
12 | elif isinstance(dt, datetime. date ): |
13 | return dt. strftime ( '%Y-%m-%d' ) |
15 | raise Exception( "日期类型错误" ) |
20 | if isinstance(dt, datetime.datetime): |
21 | return dt. strftime ( '%Y-%m-%d %H:%M:%S' ) |
22 | elif isinstance(dt, datetime. date ): |
23 | return dt. strftime ( '%Y-%m-%d' ) |
25 | raise Exception( "日期类型错误" ) |
29 | "" "当前时间转换为年月日时分秒毫秒共10位数的字符串" "" |
30 | return datetime.datetime.now(). strftime ( '%Y%m%d%H%M%S' ) |
34 | "" "获取当前时间长度为10位长度的时间戳" "" |
35 | return int(time.time()) |
39 | "" "获取当前时间长度为13位长度的时间戳" "" |
40 | return int(time.time() * 1000) |
43 | def timedelta(sign, dt, value): |
45 | 对指定时间进行加减运算,几秒、几分、几小时、几日、几周、几月、几年 |
46 | sign: y = 年, m = 月, w = 周, d = 日, h = 时, n = 分钟, s = 秒 |
47 | dt: 日期,只能是datetime或datetime. date 类型 |
49 | return : 返回运算后的datetime类型值 |
51 | if not isinstance(dt, datetime.datetime) and not isinstance(dt, datetime. date ): |
52 | raise Exception( "日期类型错误" ) |
55 | year = dt.year + value |
56 | if isinstance(dt, datetime. date ): |
57 | return datetime.datetime(year, dt.month, dt.day) |
58 | elif isinstance(dt, datetime.datetime): |
59 | return datetime.datetime(year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond) |
64 | month = dt.month + value |
65 | ### 如果月份加减后超出范围,则需要计算一下,对年份进行处理 ### |
66 | # 如果月份加减后等于0时,需要特殊处理一下 |
74 | if isinstance(dt, datetime. date ): |
75 | return datetime.datetime(year, month, dt.day) |
76 | elif isinstance(dt, datetime.datetime): |
77 | return datetime.datetime(year, month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond) |
81 | delta = datetime.timedelta(weeks=value) |
83 | delta = datetime.timedelta(days=value) |
85 | delta = datetime.timedelta(hours=value) |
87 | delta = datetime.timedelta(minutes=value) |
89 | delta = datetime.timedelta(seconds=value) |
to开头的函数都是时间类型转换函数(PS:convert_helper.py包里是对日期格式字符串转为时间类型,而datetime_helper.py里所有操作,都是对时间类型进行处理的,将它们转为其他格式)