Source code for sorts.dates
#!/usr/bin/env python
'''Functions that concern dates and times.
'''
#Python standard import
import time
import datetime
import os
#Third party import
import numpy as np
#Local import
os.environ['TZ'] = 'GMT'
time.tzset()
[docs]def date_to_unix(year, month, day, hour, minute, second):
'''Convert date to unix time in seconds
:param int year: Year as integer. Years preceding 1 A.D. should be 0 or negative. The year before 1 A.D. is 0, 10 B.C. is year -9.
:param int month: Month as integer, Jan = 1, Feb. = 2, etc.
:param int day: Day
:param int hour: Hour in 24h format
:param int minute: Minute
:param float second: Second, may contain fractional part.
:return: Unix time in seconds
:rtype: float
'''
t = datetime.datetime(year, month, day, hour, minute, second)
return time.mktime(t.timetuple())
[docs]def unix_to_date(unix):
'''Convert unix time in seconds to UTC date datetime object
:param float unix: Unix time in seconds.
:return: Datetime object in UTC
:rtype: datetime.datetime
'''
return datetime.datetime.utcfromtimestamp(unix)
[docs]def unix_to_datestr(unix):
'''Convert unix time in seconds to Gregorian calendar UTC date-time formatted string
:param float unix: Unix time in seconds.
:return: Gregorian calendar UTC date-time formatted string
:rtype: str
'''
return unix_to_date(unix).strftime('%Y-%m-%dT%H:%M:%S')
[docs]def unix_to_datestrf(x):
'''Convert unix time in seconds to Gregorian calendar UTC date-time formatted string
Different implementation?
:param float unix: Unix time in seconds.
:return: Gregorian calendar UTC date-time formatted string
:rtype: str
'''
return "%s"%(unix_to_date(x).strftime('%Y-%m-%dT%H:%M:%S.%f'))
sec = np.timedelta64(1000000000, 'ns')
'''numpy.datetime64: Interval of 1 second
'''
[docs]def jd_to_mjd(jd):
'''Convert Julian Date (relative 12h Jan 1, 4713 BC) to Modified Julian Date (relative 0h Nov 17, 1858)
'''
return jd - 2400000.5
[docs]def mjd_to_jd(mjd):
'''Convert Modified Julian Date (relative 0h Nov 17, 1858) to Julian Date (relative 12h Jan 1, 4713 BC)
'''
return mjd + 2400000.5
[docs]def npdt_to_date(dt):
'''Converts a numpy datetime64 value to a date tuple
:param numpy.datetime64 dt: Date and time (UTC) in numpy datetime64 format
:return: tuple (year, month, day, hours, minutes, seconds, microsecond)
all except usec are integer
'''
t0 = np.datetime64('1970-01-01', 's')
ts = (dt - t0)/sec
it = int(np.floor(ts))
usec = 1e6 * (dt - (t0 + it*sec))/sec
tm = time.localtime(it)
return tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, usec
[docs]def npdt_to_mjd(dt):
'''Converts a numpy datetime64 value (UTC) to a modified Julian date
'''
return (dt - np.datetime64('1858-11-17'))/np.timedelta64(1, 'D')
[docs]def mjd_to_npdt(mjd):
'''Converts a modified Julian date to a numpy datetime64 value (UTC)
'''
day = np.timedelta64(24*3600*1000*1000, 'us')
return np.datetime64('1858-11-17') + day * mjd
[docs]def unix_to_npdt(unix):
'''Converts unix seconds to a numpy datetime64 value (UTC)
'''
return np.datetime64('1970-01-01') + np.timedelta64(1000*1000,'us')*unix
[docs]def npdt_to_unix(dt):
'''Converts a numpy datetime64 value (UTC) to unix seconds
'''
return (dt - np.datetime64('1970-01-01'))/np.timedelta64(1,'s')