Source code for eaarl.util.time

# -*- coding: utf-8 -*-
# vim: set fileencoding=utf-8 :
'''Time utility functions'''

# Boilerplate for cross-compatibility of Python 2/3
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future.builtins import * # pylint: disable=wildcard-import
import future.standard_library
future.standard_library.install_aliases()

import datetime

# When updating this list, be sure to update the documentation for
# gps_utc_offset.
LEAP_DATES = [
    datetime.date(1981, 6, 30),
    datetime.date(1982, 6, 30),
    datetime.date(1983, 6, 30),
    datetime.date(1985, 6, 30),
    datetime.date(1987, 12, 31),
    datetime.date(1989, 12, 31),
    datetime.date(1990, 12, 31),
    datetime.date(1992, 6, 30),
    datetime.date(1993, 6, 30),
    datetime.date(1994, 6, 30),
    datetime.date(1995, 12, 31),
    datetime.date(1997, 6, 30),
    datetime.date(1998, 12, 31),
    datetime.date(2005, 12, 31),
    datetime.date(2008, 12, 31),
    datetime.date(2012, 6, 30),
    datetime.date(2015, 6, 30),
    datetime.date(2016, 12, 31)
]

[docs]def date_epoch_seconds(date): '''Returns the seconds-of-the-epoch time for the start of a date''' delta = date - datetime.date(1970, 1, 1) return delta.total_seconds()
[docs]def gps_utc_offset(date): '''Returns the offset in seconds between UTC and GPS time on a date .. warning:: The offset is calculated using a hard-coded list of UTC leap second dates. If leap seconds are added in the future, *eaarl.util.time.LEAP_DATES* will need to be updated. Leap seconds are announced by the International Earth Rotation and Reference Systems Service (IERS) via Bulletin C. See http://hpiers.obspm.fr/eop-pc for more information. The list of leap second dates in *LEAP_DATES* is currently accurate through at least June 2018. ''' leap = [d for d in LEAP_DATES if d < date] return len(leap)