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.

Example#

To get the times as modified Julian Dates from a minimal time series:

>>> from astropy import units as u
>>> from astropy.timeseries import TimeSeries
>>> ts = TimeSeries(time_start='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']>

To find the current time scale of the data, you can do:

>>> ts.time.scale
'utc'

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.

Example#

To change the display of the time series:

>>> ts.time.format = 'isot'
>>> ts
<TimeSeries length=5>
          time            flux
          Time          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
    Time     float64
------------ -------
1458649831.0     1.0
1458649834.0     3.0
1458649837.0     4.0
1458649840.0     2.0
1458649843.0     4.0

Times Relative to Other 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.

Example#

To use a relative rather than an absolute time:

>>> ts_rel = TimeSeries(time=ts.time - ts.time[0])
>>> ts_rel  
<TimeSeries length=5>
         time
       TimeDelta
----------------------
                   0.0
 3.472222222222765e-05
  6.94444444444553e-05
0.00010416666666657193
0.00013888888888879958

The |TimeDelta| values can be converted to a different time unit (e.g., second) using:

>>> ts_rel.time.to('second')
<Quantity [ 0.,  3.,  6.,  9., 12.] s>