- Notifications
You must be signed in to change notification settings - Fork 442
/
Copy pathtimes.py
150 lines (119 loc) · 3.52 KB
/
times.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
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
"""times module
This module provides some Date and Time classes for dealing with MySQL data.
Use Python datetime module to handle date and time columns.
"""
fromtimeimportlocaltime
fromdatetimeimportdate, datetime, time, timedelta
fromMySQLdb._mysqlimportstring_literal
Date=date
Time=time
TimeDelta=timedelta
Timestamp=datetime
DateTimeDeltaType=timedelta
DateTimeType=datetime
defDateFromTicks(ticks):
"""Convert UNIX ticks into a date instance."""
returndate(*localtime(ticks)[:3])
defTimeFromTicks(ticks):
"""Convert UNIX ticks into a time instance."""
returntime(*localtime(ticks)[3:6])
defTimestampFromTicks(ticks):
"""Convert UNIX ticks into a datetime instance."""
returndatetime(*localtime(ticks)[:6])
format_TIME=format_DATE=str
defformat_TIMEDELTA(v):
seconds=int(v.seconds) %60
minutes=int(v.seconds//60) %60
hours=int(v.seconds//3600) %24
return"%d %d:%d:%d"% (v.days, hours, minutes, seconds)
defformat_TIMESTAMP(d):
"""
:type d: datetime.datetime
"""
ifd.microsecond:
fmt=" ".join(
[
"{0.year:04}-{0.month:02}-{0.day:02}",
"{0.hour:02}:{0.minute:02}:{0.second:02}.{0.microsecond:06}",
]
)
else:
fmt=" ".join(
[
"{0.year:04}-{0.month:02}-{0.day:02}",
"{0.hour:02}:{0.minute:02}:{0.second:02}",
]
)
returnfmt.format(d)
defDateTime_or_None(s):
try:
iflen(s) <11:
returnDate_or_None(s)
micros=s[20:]
iflen(micros) ==0:
# 12:00:00
micros=0
eliflen(micros) <7:
# 12:00:00.123456
micros=int(micros) *10** (6-len(micros))
else:
returnNone
returndatetime(
int(s[:4]), # year
int(s[5:7]), # month
int(s[8:10]), # day
int(s[11:13] or0), # hour
int(s[14:16] or0), # minute
int(s[17:19] or0), # second
micros, # microsecond
)
exceptValueError:
returnNone
defTimeDelta_or_None(s):
try:
h, m, s=s.split(":")
if"."ins:
s, ms=s.split(".")
ms=ms.ljust(6, "0")
else:
ms=0
ifh[0] =="-":
negative=True
else:
negative=False
h, m, s, ms=abs(int(h)), int(m), int(s), int(ms)
td=timedelta(hours=h, minutes=m, seconds=s, microseconds=ms)
ifnegative:
return-td
else:
returntd
exceptValueError:
# unpacking or int/float conversion failed
returnNone
defTime_or_None(s):
try:
h, m, s=s.split(":")
if"."ins:
s, ms=s.split(".")
ms=ms.ljust(6, "0")
else:
ms=0
h, m, s, ms=int(h), int(m), int(s), int(ms)
returntime(hour=h, minute=m, second=s, microsecond=ms)
exceptValueError:
returnNone
defDate_or_None(s):
try:
returndate(
int(s[:4]),
int(s[5:7]),
int(s[8:10]),
) # year # month # day
exceptValueError:
returnNone
defDateTime2literal(d, c):
"""Format a DateTime object as an ISO timestamp."""
returnstring_literal(format_TIMESTAMP(d))
defDateTimeDelta2literal(d, c):
"""Format a DateTimeDelta object as a time."""
returnstring_literal(format_TIMEDELTA(d))