Time conversion, manipulation and implementation of Ticktock class
>>> import spacepy.time as spt
>>> import datetime as dt
Day of year calculations
>>> dts = spt.doy2date([2002]*4, range(186,190), dtobj=True)
>>> dts
[datetime.datetime(2002, 7, 5, 0, 0),
datetime.datetime(2002, 7, 6, 0, 0),
datetime.datetime(2002, 7, 7, 0, 0),
datetime.datetime(2002, 7, 8, 0, 0)]
>>> dts = spt.Ticktock(dts,'UTC')
>>> dts.DOY
array([ 186., 187., 188., 189.])
Ticktock object creation
>>> isodates = ['2009-12-01T12:00:00', '2009-12-04T00:00:00', '2009-12-06T12:00:00']
>>> dts = spt.Ticktock(isodates, 'ISO')
OR
>>> dtdates = [dt.datetime(2009,12,1,12), dt.datetime(2009,12,4), dt.datetime(2009,12,6,12)]
>>> dts = spt.Ticktock(dtdates, 'UTC')
ISO time formatting
>>> dts = spt.tickrange('2009-12-01T12:00:00','2009-12-06T12:00:00',2.5)
OR
>>> dts = spt.tickrange(dt.datetime(2009,12,1,12),dt.datetime(2009,12,6,12), dt.timedelta(days=2, hours=12))
>>> dts
Ticktock( ['2009-12-01T12:00:00', '2009-12-04T00:00:00', '2009-12-06T12:00:00'] ), dtype=ISO
>>> dts.isoformat()
Current ISO output format is %Y-%m-%dT%H:%M:%S
Options are: [('seconds', '%Y-%m-%dT%H:%M:%S'), ('microseconds', '%Y-%m-%dT%H:%M:%S.%f')]
>>> dts.isoformat('microseconds')
>>> dts.ISO
['2009-12-01T12:00:00.000000',
'2009-12-04T00:00:00.000000',
'2009-12-06T12:00:00.000000']
Time manipulation
>>> new_dts = dts + tdelt
>>> new_dts.UTC
[datetime.datetime(2009, 12, 2, 18, 0),
datetime.datetime(2009, 12, 5, 6, 0),
datetime.datetime(2009, 12, 7, 18, 0)]
Other time formats
>>> dts.RDT # Gregorian ordinal time
array([ 733742.5, 733745. , 733747.5])
>>> dts.GPS # GPS time
array([ 9.43704015e+08, 9.43920015e+08, 9.44136015e+08])
>>> dts.JD # Julian day
array([ 2455167. , 2455169.5, 2455172. ])
And so on.
Authors: Steve Morley, Josef Koller, Brian Larsen, Jon Niehof Institution: Los Alamos National Laboratory Contact: smorley@lanl.gov,
Copyright 2010 Los Alamos National Security, LLC.
Ticktock class holding various time coordinate systems (TAI, UTC, ISO, JD, MJD, UNX, RDT, CDF, DOY, eDOY)
Possible input data types: ISO: ISO standard format like ‘2002-02-25T12:20:30’ UTC: datetime object with UTC time TAI: elapsed seconds since 1958/1/1 (includes leap seconds) UNX: elapsed seconds since 1970/1/1 (all days have 86400 secs sometimes unequal lenghts) JD: Julian days elapsed MJD: Modified Julian days RDT: Rata Die days elapsed since 1/1/1 CDF: CDF epoch: milliseconds since 1/1/0000
Possible output data types: All those listed above, plus DOY: Integer day of year, starts with day 1 eDOY: Fractional day of year, starts at day 0
Parameters: | data : array_like (int, datetime, float, string)
dtype : string {CDF, ISO, UTC, TAI, UNX, JD, MJD, RDT} or function
|
---|---|
Returns: | out : Ticktock
|
Examples
>>> x = Ticktock([2452331.0142361112, 2452332.0142361112], 'JD')
>>> x.ISO
dmarray(['2002-02-25T12:20:30', '2002-02-26T12:20:30'], dtype='|S19')
>>> x.DOY # Day of year
dmarray([ 56., 57.])
>>> y = Ticktock(['01-01-2013', '20-03-2013'], lambda x: datetime.datetime.strptime(x, '%d-%m-%Y'))
>>> y.UTC
dmarray([2013-01-01 00:00:00, 2013-03-20 00:00:00], dtype=object)
>>> y.DOY # Day of year
dmarray([ 1., 79.])
append(other) | Will be called when another Ticktock instance has to be appended to the current one |
argsort() | This will return the indices that would sort the Ticktock values |
convert(dtype) | convert a Ticktock instance into a new time coordinate system provided in dtype |
getCDF() | a.getCDF() or a.CDF |
getDOY() | a.DOY or a.getDOY() |
getGPS() | a.GPS or a.getGPS() |
getISO() | a.ISO or a.getISO() |
getJD() | a.JD or a.getJD() |
getMJD() | a.MJD or a.getMJD() |
getRDT() | a.RDT or a.RDT() |
getTAI() | a.TAI or a.getTAI() |
getUNX() | a.UNX or a.getUNX() |
getUTC() | a.UTC or a.getUTC() |
geteDOY() | a.eDOY or a.geteDOY() |
getleapsecs() | a.leaps or a.getleapsecs() |
isoformat(b, attrib) | This changes the self.__isofmt attribute by and subsequently this function will update the ISO attribute. |
now() | Creates a Ticktock object with the current time, equivalent to datetime.now() |
sort() | This will sort the Ticktock values in place |
update_items(b, attrib) | After changing the self.data attribute by either __setitem__ or __add__ etc this function will update all other attributes. |
Will be called when another Ticktock instance has to be appended to the current one
Parameters: | other : Ticktock
|
---|
This will return the indices that would sort the Ticktock values
Returns: | out : list
|
---|
convert a Ticktock instance into a new time coordinate system provided in dtype
Parameters: | dtype : string
|
---|---|
Returns: | out : Ticktock
|
See also
CDF, ISO, UTC
Examples
>>> a = Ticktock(['2002-02-02T12:00:00', '2002-02-02T12:00:00'], 'ISO')
>>> s = a.convert('TAI')
>>> type(s)
<class 'time.Ticktock'>
>>> s
Ticktock( [1391342432 1391342432] ), dtype=TAI
a.getCDF() or a.CDF
Return CDF time which is milliseconds since 01-Jan-0000 00:00:00.000. “Year zero” is a convention chosen by NSSDC to measure epoch values. This date is more commonly referred to as 1 BC. Remember that 1 BC was a leap year. The CDF date/time calculations do not take into account the changes to the Gregorian calendar, and cannot be directly converted into Julian date/times.
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.CDF
array([ 6.31798704e+13])
a.DOY or a.getDOY()
extract DOY (days since January 1st of given year)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.DOY
array([ 33])
a.GPS or a.getGPS()
return GPS epoch (0000 UT (midnight) on January 6, 1980)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.GPS
array([])
a.ISO or a.getISO()
convert dtype data into ISO string
Returns: | out : list of strings
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.ISO
dmarray(['2002-02-02T12:00:00'])
a.JD or a.getJD()
convert dtype data into Julian Date (JD)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.JD
array([ 2452308.])
a.MJD or a.getMJD()
convert dtype data into MJD (modified Julian date)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.MJD
array([ 52307.5])
a.RDT or a.RDT()
convert dtype data into Rata Die (lat.) Time (days since 1/1/0001)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.RDT
array([ 730883.5])
a.TAI or a.getTAI()
return TAI (International Atomic Time)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.TAI
array([1391342432])
a.UNX or a.getUNX()
convert dtype data into Unix Time (Posix Time) seconds since 1970-Jan-1 (not counting leap seconds)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.UNX
array([ 1.01265120e+09])
a.UTC or a.getUTC()
convert dtype data into UTC object a la datetime()
Returns: | out : list of datetime objects
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.UTC
[datetime.datetime(2002, 2, 2, 12, 0)]
a.eDOY or a.geteDOY()
extract eDOY (elapsed days since midnight January 1st of given year)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.eDOY
array([ 32.5])
a.leaps or a.getleapsecs()
retrieve leapseconds from lookup table, used in getTAI
Returns: | out : numpy array
|
---|
See also
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.leaps
array([32])
This changes the self.__isofmt attribute by and subsequently this function will update the ISO attribute.
Parameters: | fmt : string, optional |
---|
Creates a Ticktock object with the current time, equivalent to datetime.now()
Returns: | out : ticktock
|
---|
See also
After changing the self.data attribute by either __setitem__ or __add__ etc this function will update all other attributes. This function is called automatically in __add__ and __setitem__
Parameters: | cls : Ticktock attrib : string
|
---|
See also
spacepy.Ticktock.__setitem__, spacepy.Ticktock.__add__, spacepy.Ticktock.__sub__
Will be called when another Ticktock instance has to be appended to the current one
Parameters: | other : Ticktock
|
---|
This will return the indices that would sort the Ticktock values
Returns: | out : list
|
---|
convert a Ticktock instance into a new time coordinate system provided in dtype
Parameters: | dtype : string
|
---|---|
Returns: | out : Ticktock
|
See also
CDF, ISO, UTC
Examples
>>> a = Ticktock(['2002-02-02T12:00:00', '2002-02-02T12:00:00'], 'ISO')
>>> s = a.convert('TAI')
>>> type(s)
<class 'time.Ticktock'>
>>> s
Ticktock( [1391342432 1391342432] ), dtype=TAI
a.getCDF() or a.CDF
Return CDF time which is milliseconds since 01-Jan-0000 00:00:00.000. “Year zero” is a convention chosen by NSSDC to measure epoch values. This date is more commonly referred to as 1 BC. Remember that 1 BC was a leap year. The CDF date/time calculations do not take into account the changes to the Gregorian calendar, and cannot be directly converted into Julian date/times.
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.CDF
array([ 6.31798704e+13])
a.DOY or a.getDOY()
extract DOY (days since January 1st of given year)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.DOY
array([ 33])
a.GPS or a.getGPS()
return GPS epoch (0000 UT (midnight) on January 6, 1980)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.GPS
array([])
a.ISO or a.getISO()
convert dtype data into ISO string
Returns: | out : list of strings
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.ISO
dmarray(['2002-02-02T12:00:00'])
a.JD or a.getJD()
convert dtype data into Julian Date (JD)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.JD
array([ 2452308.])
a.MJD or a.getMJD()
convert dtype data into MJD (modified Julian date)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.MJD
array([ 52307.5])
a.RDT or a.RDT()
convert dtype data into Rata Die (lat.) Time (days since 1/1/0001)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.RDT
array([ 730883.5])
a.TAI or a.getTAI()
return TAI (International Atomic Time)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.TAI
array([1391342432])
a.UNX or a.getUNX()
convert dtype data into Unix Time (Posix Time) seconds since 1970-Jan-1 (not counting leap seconds)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.UNX
array([ 1.01265120e+09])
a.UTC or a.getUTC()
convert dtype data into UTC object a la datetime()
Returns: | out : list of datetime objects
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.UTC
[datetime.datetime(2002, 2, 2, 12, 0)]
a.eDOY or a.geteDOY()
extract eDOY (elapsed days since midnight January 1st of given year)
Returns: | out : numpy array
|
---|
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.eDOY
array([ 32.5])
a.leaps or a.getleapsecs()
retrieve leapseconds from lookup table, used in getTAI
Returns: | out : numpy array
|
---|
See also
Examples
>>> a = Ticktock('2002-02-02T12:00:00', 'ISO')
>>> a.leaps
array([32])
insert values into the TickTock object
Note
If more than one value to insert a slice must be specified
as the index. See numpy.insert
Parameters: | idx : int, slice or sequence of ints
|
---|
This changes the self.__isofmt attribute by and subsequently this function will update the ISO attribute.
Parameters: | fmt : string, optional |
---|
Creates a Ticktock object with the current time, equivalent to datetime.now()
Returns: | out : ticktock
|
---|
See also
This will sort the Ticktock values in place
After changing the self.data attribute by either __setitem__ or __add__ etc this function will update all other attributes. This function is called automatically in __add__ and __setitem__
Parameters: | cls : Ticktock attrib : string
|
---|
See also
spacepy.Ticktock.__setitem__, spacepy.Ticktock.__add__, spacepy.Ticktock.__sub__
convert integer day-of-year doy into a month and day after http://pleac.sourceforge.net/pleac_python/datesandtimes.html
Parameters: | year : int or array of int
doy : int or array of int
|
---|---|
Returns: | month : int or array of int
day : int or array of int
|
See also
Examples
>>> month, day = doy2date(2002, 186)
>>> dts = doy2date([2002]*4, range(186,190), dtobj=True)
go through a string and extract the first valid YYYYMMDD as a datetime
Parameters: | filename : str
|
---|---|
Returns: | out : (None, datetime.datetime)
|
return an array of boolean leap year, a lot faster than the mod method that is normally seen
Parameters: | year : array_like
numdays : boolean (optional)
|
---|---|
Returns: | out : numpy array
|
Examples
>>> import numpy
>>> import spacepy.time
>>> spacepy.time.leapyear(numpy.arange(15)+1998)
[False, False, True, False, False, False, True, False, False,
False, True, False, False, False, True]
take in an arraylike of datetime objects and return them without any tzinfo
Parameters: | dt : iterable
|
---|---|
Returns: | out : list
|
Return a (or many) random datetimes between two given dates, this is done under the convention dt <=1 rand < dt2
Parameters: | dt1 : datetime.datetime
dt2 : datetime.datetime
|
---|---|
Returns: | out : datetime.datetime or numpy.ndarray of datetime.datetime
|
Other Parameters: | |
N : int (optional)
tzinfo : bool (optional)
sorted : bool (optional)
|
Convert seconds of day to hours, minutes, seconds
Parameters: | sec : float
|
---|---|
Returns: | out : [hours, minutes, seconds] or datetime.timedelta |
Other Parameters: | |
rounding : boolean
days : boolean
dtobj : boolean
|
return a Ticktock range given the start, end, and delta
Parameters: | start : string or number
end : string or number
deltadays : float or timedelta
dtype : string (optional)
|
---|---|
Returns: | out : Ticktock instance
|
See also
Examples
>>> ticks = st.tickrange('2002-02-01T00:00:00', '2002-02-10T00:00:00', deltadays = 1)
>>> ticks
Ticktock( ['2002-02-01T00:00:00', '2002-02-02T00:00:00', '2002-02-03T00:00:00',
'2002-02-04T00:00:00'] , dtype=ISO)
Classes
Tickdelta | |
Ticktock(data, dtype) | Ticktock class holding various time coordinate systems |
Functions
date2num | |
doy2date(year, doy[, dtobj, flAns]) | convert integer day-of-year doy into a month and day |
leapyear(year[, numdays]) | return an array of boolean leap year, |
num2date | |
randomDate(dt1, dt2[, N, tzinfo, sorted]) | Return a (or many) random datetimes between two given dates, this is done under the convention dt <=1 rand < dt2 |
sec2hms(sec[, rounding, days, dtobj]) | Convert seconds of day to hours, minutes, seconds |
tickrange(start, end, deltadays[, dtype]) | return a Ticktock range given the start, end, and delta |