-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdatetime_helper.py
56 lines (48 loc) · 1.83 KB
/
datetime_helper.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
from datetime import datetime, date
from apimatic_core.types.datetime_format import DateTimeFormat
class DateTimeHelper:
@staticmethod
def validate_datetime(datetime_value, datetime_format):
if DateTimeFormat.RFC3339_DATE_TIME == datetime_format:
return DateTimeHelper.is_rfc_3339(datetime_value)
elif DateTimeFormat.UNIX_DATE_TIME == datetime_format:
return DateTimeHelper.is_unix_timestamp(datetime_value)
elif DateTimeFormat.HTTP_DATE_TIME == datetime_format:
return DateTimeHelper.is_rfc_1123(datetime_value)
return False
@staticmethod
def validate_date(date_value):
try:
if isinstance(date_value, date):
datetime.strptime(date_value.isoformat(), "%Y-%m-%d")
return True
elif isinstance(date_value, str):
datetime.strptime(date_value, "%Y-%m-%d")
return True
else:
return False
except ValueError:
return False
@staticmethod
def is_rfc_1123(datetime_value):
try:
datetime.strptime(datetime_value, "%a, %d %b %Y %H:%M:%S %Z")
return True
except (ValueError, AttributeError, TypeError):
return False
@staticmethod
def is_rfc_3339(datetime_value):
try:
if '.' in datetime_value:
datetime_value = datetime_value[:datetime_value.rindex('.')]
datetime.strptime(datetime_value, "%Y-%m-%dT%H:%M:%S")
return True
except (ValueError, AttributeError, TypeError):
return False
@staticmethod
def is_unix_timestamp(timestamp):
try:
datetime.fromtimestamp(float(timestamp))
return True
except (ValueError, AttributeError, TypeError):
return False