Source code for dateconv
# -*- encoding: utf-8 -*-
import datetime
import time
[docs]class DateConvException(Exception):
pass
[docs]def h2u(value, view='%Y-%m-%d %H:%M:%S', unix_int=True):
"""Convert str in format (view) to unix time.
:param value: string of date
:param view: format string
:param unix_int: return unix time as int value
:return: unix time (int value)
"""
try:
result = time.mktime(datetime.datetime.strptime(value, view)
.timetuple())
result = int(result) if unix_int else result
except (ValueError, AttributeError) as e:
raise DateConvException('Exception from dateconv: %s' % str(e))
else:
return result
[docs]def d2u(value, unix_int=True):
"""Convert datetime object to unix time.
:param value: datetime.datetime object
:param unix_int: return unix time as int value
:return: unix time (int value)
"""
try:
result = time.mktime(value.timetuple())
result = int(result) if unix_int else result
except (ValueError, AttributeError) as e:
raise DateConvException('Exception from dateconv: %s' % str(e))
else:
return result
[docs]def u2d(value, unix_int=True):
"""Convert unix time to datetime.
:param value: datetime object
:param unix_int: before converting to datetime, convert unix time to int
:return:
"""
try:
value = int(value) if unix_int else value
result = datetime.datetime.fromtimestamp(value)
except (ValueError, AttributeError) as e:
raise DateConvException('Exception from dateconv: %s' % str(e))
else:
return result
[docs]def h2d(value, view='%Y-%m-%d %H:%M:%S', unix_int=True):
"""Convert str in format %view% to datetime.
:param value: datetime object
:param view: format string
:param unix_int: before converting to datetime, convert unix time to int
:return:
"""
try:
result = u2d(h2u(value, view, unix_int))
except (ValueError, AttributeError) as e:
raise DateConvException('Exception from dateconv: %s' % str(e))
else:
return result
[docs]def d2h(value, view='%Y-%m-%d %H:%M:%S'):
"""Convert datetime object to str in format.
:param value: datetime.datetime object
:return: unix time (int value)
"""
try:
result = value.strftime(view)
except (ValueError, AttributeError) as e:
raise DateConvException('Exception from dateconv: %s' % str(e))
else:
return result
[docs]def u2h(value, view='%Y-%m-%d %H:%M:%S', unix_int=True):
"""Convert unix time to datetime object.
:param value: unix_time (int value)
:param view: format to string
:param unix_int: before converting to datetime, convert unix time to int
:return:
"""
try:
value = int(value) if unix_int else value
result = d2h(datetime.datetime.fromtimestamp(value), view)
except (ValueError, AttributeError) as e:
raise DateConvException('Exception from dateconv: %s' % str(e))
else:
return result
[docs]def l2g(value, view='%Y-%m-%d %H:%M:%S'):
"""Convert local time to gmt.
:param value: time value (str, datetime, unix time)
:param view: format to string
:return: return unix time
"""
if isinstance(value, str):
unix_value = h2u(value, view)
elif isinstance(value, datetime.datetime):
unix_value = d2u(value)
elif isinstance(value, int):
unix_value = value
else:
raise DateConvException(
'Exception from dateconv: not define type of value: %s' % type(
value))
return int(time.mktime(time.gmtime(unix_value)))
[docs]def g2l(value, view='%Y-%m-%d %H:%M:%S'):
"""Convert gtm time to local time.
:param value: time value (str, datetime, unix time)
:param view: format to string
:return:
"""
if isinstance(value, str):
unix_value = h2u(value, view)
elif isinstance(value, datetime.datetime):
unix_value = d2u(value)
elif isinstance(value, int):
unix_value = value
else:
raise DateConvException(
'Exception from dateconv: not define type of value: %s' % type(
value))
offset = (datetime.datetime.fromtimestamp(
unix_value) - datetime.datetime.utcfromtimestamp(
unix_value)).total_seconds()
return int(unix_value + offset)