Source code for irisreader.utils.date

#!/usr/bin/env python3

# This file contains date utility functions

from datetime import datetime as dt
from datetime import timedelta

T_FORMAT_MS = '%Y-%m-%dT%H:%M:%S.%f'
T_FORMAT_S = '%Y-%m-%dT%H:%M:%S'
OBS_FORMAT = '%Y%m%d_%H%M%S'


[docs]def from_Tformat( date_str ): """ Converts from the FITS date format '%Y-%m-%dT%H:%M:%S.%f' to a datetime object. Parameters ---------- date_str : str FITS date string with 'T' between date and time. Returns ------- datetime : Python datetime object """ try: date = dt.strptime( date_str , T_FORMAT_MS ) except ValueError: date = dt.strptime( date_str , T_FORMAT_S ) return date
[docs]def to_Tformat( date, milliseconds=True ): """ Converts from a datetime object to the FITS date format '%Y-%m-%dT%H:%M:%S'. Parameters ---------- date : datetime Python datetime object milliseconds : bool Whether to include milliseconds in the output (separated with a dot) Returns ------- date_str : str FITS date string with 'T' between date and time. """ if milliseconds: date_str = dt.strftime( date, T_FORMAT_MS )[:-3] else: # round to seconds microseconds = date.microsecond / 1e6 date_str = dt.strftime( date + timedelta( seconds=round(microseconds) ) , T_FORMAT_S ) return date_str
[docs]def from_obsformat( full_obsid_str ): """ Converts a full OBSID string to a date. Parameters ---------- full_obsid_str : str Full OBSID Returns ------- datetime : Python datetime object """ date_str = '_'.join( full_obsid_str.split('_')[:-1] ) date = dt.strptime( date_str, OBS_FORMAT ) return date
[docs]def to_epoch( date ): """ Converts a date to an integer with the number of seconds since 1.1.1970. This can be useful for time difference calculations. Parameters ---------- date : datetime Python datetime object Returns ------- int : Seconds since 1.1.1970 00:00:00 """ return (date - dt.utcfromtimestamp(0)).total_seconds()