#!/usr/bin/env python
u"""
convert_delta_time.py (04/2024)
Converts time from delta seconds into Julian and year-decimal
INPUTS:
delta_time: seconds since gps_epoch
OPTIONS:
gps_epoch: seconds between delta_time and GPS epoch (1980-01-06T00:00:00)
ICESat-2 atlas_sdp_gps_epoch: 1198800018.0
OUTPUTS:
julian: time in Julian days
decimal: time in year-decimal
PYTHON DEPENDENCIES:
numpy: Scientific Computing Tools For Python
https://numpy.org
timescale: Python tools for time and astronomical calculations
https://pypi.org/project/timescale/
UPDATE HISTORY:
Updated 04/2024: use timescale for temporal operations
Updated 04/2022: updated docstrings to numpy documentation format
Updated 01/2021: time utilities for converting times from JD and to decimal
Updated 08/2020: time utilities for counting leap seconds and JD conversion
Updated 07/2020: added function docstrings
Written 05/2020
"""
import numpy as np
import timescale.time
# PURPOSE: convert time from delta seconds into Julian and year-decimal
[docs]def convert_delta_time(delta_time, gps_epoch=1198800018.0):
"""
converts ICESat-2 delta_times into into Julian and year-decimal
Parameters
----------
delta_time: float
seconds since gps_epoch
gps_epoch: float, default 1198800018.0
seconds between delta_time and GPS epoch (1980-01-06T00:00:00)
Returns
-------
julian: float
time in Julian days
decimal: float
time in year-decimal
"""
# convert to array if single value
delta_time = np.atleast_1d(delta_time)
# calculate gps time from delta_time
gps_seconds = gps_epoch + delta_time
time_leaps = timescale.time.count_leap_seconds(gps_seconds)
# calculate Julian time (UTC) by converting to MJD and then adding offset
time_julian = 2400000.5 + timescale.time.convert_delta_time(
gps_seconds - time_leaps, epoch1=(1980,1,6,0,0,0),
epoch2=(1858,11,17,0,0,0), scale=1.0/86400.0)
# convert to calendar date
Y,M,D,h,m,s = timescale.time.convert_julian(time_julian,format='tuple')
# calculate year-decimal time (UTC)
time_decimal = timescale.time.convert_calendar_decimal(Y,M,day=D,
hour=h,minute=m,second=s)
# return both the Julian and year-decimal formatted dates
return dict(julian=np.squeeze(time_julian),decimal=np.squeeze(time_decimal))