Pulpcode

捕获,搅碎,拼接,吞咽

0%

自己写了一个好用的时间类

在开发过程中,经常会用到时间的各种转换,在python中基本就是使用datetime和time这两个类的来回切换,但是每次都要查阅,用起来很麻烦,所以我就自己实现了一个time类,不管怎么样,我自己用起来感觉很方便。类名叫ZenTime,当然,Zen是禅的意思。

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217

# -*- coding: utf-8 -*-

import datetime
import time

DATE_PATTERN_YMD_HMS = "%Y-%m-%d %H:%M:%S"
DATE_PATTERN_YMD = "%Y-%m-%d"


def stamp_to_datetime(stamp):
"""
将一个时间戳转化为datetime
"""
ltime = time.localtime(stamp)
time_str = time.strftime("%Y,%m,%d,%H,%M,%S", ltime).split(',')
time_int = [int(i) for i in time_str]
return datetime.datetime(*time_int)


def datetime_to_stamp(dt):
"""
将一个datetime转化为时间戳
"""
return int(time.mktime(dt.timetuple()))


def stamp_to_date_str(stamp, pattern):
"""
将一个时间戳转化为时间字符串
:return:
"""
time_array = time.localtime(stamp)
return time.strftime(pattern, time_array)


def date_str_to_stamp(date_str, pattern):
"""
将一个时间字符串转化为时间戳
:return:
"""
time_array = time.strptime(date_str, pattern)
return int(time.mktime(time_array))


def datetime_to_date_str(dt, pattern):
"""
将一个datetime转化为时间字符串
:return:
"""
return dt.strptime(pattern)


def date_str_to_datetime(date_str, pattern):
"""
将一个时间字符串转化为datetime
:return:
"""
return datetime.datetime.strptime(date_str, pattern)


def get_now_datetime():
"""
获得当前datetime
:return:
"""
return datetime.datetime.now()


def get_now_stamp():
"""
获得当前时间戳
:return:
"""
return datetime_to_stamp(get_now_datetime())


def get_now_date_str(pattern):
"""
获得当前时间字符串
:return:
"""
return datetime_to_date_str(get_now_datetime(), pattern)


def add_day(dt, days):
"""
增加x天
:param date_str:
:param day:
:return:
"""
return dt + datetime.timedelta(days=days)


def add_minute(dt, minutes):
"""
增加x分钟
:return:
"""
return dt + datetime.timedelta(minutes=minutes)


def add_second(dt, seconds):
"""
增加x秒
:return:
"""
return dt + datetime.timedelta(seconds=seconds)


def deducti_day(date_str, days):
"""
减少x天
:param date_str:
:param day:
:return:
"""
return add_day(date_str, -1*days)


def deducti_minute(date_str, minutes):
"""
减少x分钟
:return:
"""
return add_minute(date_str, -1*minutes)


def deducti_second(date_str, seconds):
"""
减少x秒
:return:
"""
return add_second(date_str, -1*seconds)


def is_expire_day(dt):
"""
是否已经过期
:return:
"""
return dt < get_now_datetime()


def is_same_day(dt1, dt2):
"""
是否是同一天
"""
return dt1.year == dt2.year and dt1.month == dt2.month and dt1.day == dt2.day


def adjust_day_start(dt):
"""
调整到一天的开始
:return:
"""
return dt.replace(hour=0, minute=0, second=0)


def adjust_day_end(dt):
"""
调整到一天的结束
:return:
"""
return dt.replace(hour=23, minute=59, second=59)


def get_time_difference_sec(dt1, dt2):
"""
返回时间差(秒)
:return:
"""
return (dt2 - dt1).seconds


def first_day_of_month():
"""
获取本月第一天
:return:
"""
return datetime.date.today() - datetime.timedelta(days=datetime.datetime.now().day - 1)


def is_weekday(dt):
"""
是否是周末,星期六(返回5),星期天(返回6)
:return:
"""
return dt.weekday() >= 5


def is_valid_date(date_str, pattern):
"""
判断是否有效的日期格式
:return:
"""
try:
date_str_to_stamp(date_str, pattern)
except:
return False
else:
return True


def isleap(dt):
"""
判断是否是闰年
:return:
"""
return (dt.year % 4 == 0) and (dt.year % 100 != 0) or (dt.year % 400 == 0)


if __name__ == "__main__":
stamp = date_str_to_stamp("2012-12-23 23:56:59", DATE_PATTERN_YMD_HMS)
print(stamp_to_date_str(stamp, DATE_PATTERN_YMD_HMS))