-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhwman.py
58 lines (57 loc) · 1.67 KB
/
hwman.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
from datetime import datetime
from datetime import date
from datetime import time
from dateutil.relativedelta import relativedelta as rd
def get_datetime(s):
'''
Try to match the string to a datetime.
'''
if s.lower() == 'now':
return datetime.now()
if s.lower() == 'today':
return datetime.combine(date.today(), time())
dateformats = ('%Y-%m-%d',
'%y-%m-%d',
'%Y %m %d',
'%y %m %d',
'%d %b %Y',
'%d %b %y',)
datenoyearformats = ('%b %d',
'%d %b',
'%m %d',
'%d %m',)
timeformats = ('%H:%M',
'%I:%M%p',)
datetimeformats = ('%s %s',)
for form in dateformats:
try:
return datetime.strptime(s, form)
except ValueError:
pass
for form in timeformats:
try:
t = datetime.strptime(s, form)
return datetime.combine(date.today(), t.time())
except ValueError:
pass
for form in datenoyearformats:
try:
t = datetime.strptime(s, form)
t = t.replace(year=date.today().year)
return t
except ValueError:
pass
for form_dt in datetimeformats:
for form_d in dateformats:
for form_t in timeformats:
form = form_dt % (form_d, form_t)
try:
return datetime.strptime(s, form)
except ValueError:
pass
form = form_dt % (form_t, form_d)
try:
return datetime.strptime(s, form)
except ValueError:
pass
raise ValueError('Not a recognized datetime.')