def timestamp_to_datetime(obj):
"""Converts an object to a `datetime.datetime` object.
Note that because floating point values are approximate, some conversions
may not be reversible.
Args:
obj: may be any of the following:
1. `datetime.datetime` object
2. Arrow object
3. ISO 8601 string
4. `time.struct_time` object
5. integer (epoch time)
6. float (epoch time)
7. 2-tuple of integers (seconds and microseconds, epoch time)
Returns:
datetime.datetime: (local) timezone-aware object
Raises:
TypeError: if `obj` cannot be interpreted according to the list above
"""
import numbers
from time import mktime, struct_time
if isinstance(obj, datetime):
dt = obj
elif isinstance(obj, arrow.Arrow):
dt = obj.datetime
elif isinstance(obj, str):
dt = arrow.get(obj).datetime
elif isinstance(obj, struct_time):
dt = mktime(obj)
elif isinstance(obj, numbers.Number):
dt = datetime.fromtimestamp(obj)
elif hasattr(obj, '__getitem__'):
dt = datetime.fromtimestamp(obj[0])
dt += timedelta(microseconds=int(obj[1]))
else:
raise TypeError("unable to convert %s to timestamp" % obj)
return dt
评论列表
文章目录