Converting between different time representations¶
In Accessing times, we saw how to access the time
columns/attributes of the TimeSeries
and BinnedTimeSeries
classes. Here we
look in more detail at how to manipulate the resulting times.
Converting times¶
Since the time column in time series is always a Time
object, it is possible to use the
usual attributes on Time
to convert the time to different formats or scales.
For example, to get the times as modified Julian Dates from a simple time series:
>>> from astropy import units as u
>>> from astropy_timeseries import TimeSeries
>>> ts = TimeSeries(time='2016-03-22T12:30:31', time_delta=3 * u.s,
... data={'flux': [1., 3., 4., 2., 4.]})
>>> ts.time.mjd
array([57469.52119213, 57469.52122685, 57469.52126157, 57469.5212963 ,
57469.52133102])
or to convert the times to the Temps Atomique International (TAI) scale
>>> ts.time.tai
<Time object: scale='tai' format='isot' value=['2016-03-22T12:31:07.000' '2016-03-22T12:31:10.000'
'2016-03-22T12:31:13.000' '2016-03-22T12:31:16.000'
'2016-03-22T12:31:19.000']>
See Time and Dates (astropy.time) for more documentation on how to access and convert times.
Formatting times¶
Since the various time columns are Time
objects, the default format and scale
to use for the display of the time series can be changed using the format
and scale
attributes:
>>> ts.time.format = 'isot'
>>> ts
<TimeSeries length=5>
time flux
object float64
----------------------- -------
2016-03-22T12:30:31.000 1.0
2016-03-22T12:30:34.000 3.0
2016-03-22T12:30:37.000 4.0
2016-03-22T12:30:40.000 2.0
2016-03-22T12:30:43.000 4.0
>>> ts.time.format = 'unix'
>>> ts
<TimeSeries length=5>
time flux
object float64
------------------ -------
1458649831.0 1.0
1458649834.0 3.0
1458649837.0 4.0
1458649840.0 2.0
1458649843.0 4.0
Relative times¶
In some cases, it can be useful to use relative rather than absolute times.
This can be done by using the TimeDelta
class instead of the Time
class,
for example by subtracting a reference time from an existing time object:
>>> ts_rel = TimeSeries(time=ts.time - ts.time[0])
>>> ts_rel
<TimeSeries length=5>
time
object
----------------------
0.0
3.472222222222765e-05
6.94444444444553e-05
0.00010416666666657193
0.00013888888888879958
The TimeDelta
values can be converted to different time units using e.g.:
>>> ts_rel.time.sec
array([ 0., 3., 6., 9., 12.])