def epoch16_to_datetime(self, epoch0, epoch1):
    '\n        Converts a CDF epoch16 value to a datetime\n\n        .. note::\n            The call signature has changed since SpacePy 0.1.2. Formerly\n            this method took a single argument with two values; now it\n            requires two arguments (one for each value). To convert existing\n            code, replace ``epoch16_to_datetime(epoch)`` with\n            ``epoch16_to_datetime(*epoch)``.\n\n        Parameters\n        ==========\n        epoch0 : float\n            epoch16 value from CDF, first half\n        epoch1 : float\n            epoch16 value from CDF, second half\n\n        Raises\n        ======\n        EpochError : if input invalid\n\n        Returns\n        =======\n        out : :class:`datetime.datetime`\n            date and time corresponding to epoch. Invalid values are set to\n            usual epoch invalid value, i.e. last moment of year 9999.\n\n        See Also\n        ========\n        v_epoch16_to_datetime\n        '
    yyyy = ctypes.c_long(0)
    mm = ctypes.c_long(0)
    dd = ctypes.c_long(0)
    hh = ctypes.c_long(0)
    min = ctypes.c_long(0)
    sec = ctypes.c_long(0)
    msec = ctypes.c_long(0)
    usec = ctypes.c_long(0)
    nsec = ctypes.c_long(0)
    psec = ctypes.c_long(0)
    self._library.EPOCH16breakdown((ctypes.c_double * 2)(epoch0, epoch1), ctypes.byref(yyyy), ctypes.byref(mm), ctypes.byref(dd), ctypes.byref(hh), ctypes.byref(min), ctypes.byref(sec), ctypes.byref(msec), ctypes.byref(usec), ctypes.byref(nsec), ctypes.byref(psec))
    if (yyyy.value <= 0):
        return datetime.datetime(9999, 12, 13, 23, 59, 59, 999999)
    micro = int((((((float(msec.value) * 1000) + float(usec.value)) + (float(nsec.value) / 1000)) + (float(psec.value) / 1000000.0)) + 0.5))
    if (micro < 1000000):
        return datetime.datetime(yyyy.value, mm.value, dd.value, hh.value, min.value, sec.value, micro)
    else:
        add_sec = int((micro / 1000000))
        try:
            return (datetime.datetime(yyyy.value, mm.value, dd.value, hh.value, min.value, sec.value, (micro - (add_sec * 1000000))) + datetime.timedelta(seconds=add_sec))
        except OverflowError:
            return datetime.datetime(datetime.MAXYEAR, 12, 31, 23, 59, 59, 999999)
Converts a CDF epoch16 value to a datetime

.. note::
    The call signature has changed since SpacePy 0.1.2. Formerly
    this method took a single argument with two values; now it
    requires two arguments (one for each value). To convert existing
    code, replace ``epoch16_to_datetime(epoch)`` with
    ``epoch16_to_datetime(*epoch)``.

Parameters
==========
epoch0 : float
    epoch16 value from CDF, first half
epoch1 : float
    epoch16 value from CDF, second half

Raises
======
EpochError : if input invalid

Returns
=======
out : :class:`datetime.datetime`
    date and time corresponding to epoch. Invalid values are set to
    usual epoch invalid value, i.e. last moment of year 9999.

See Also
========
v_epoch16_to_datetime
def epoch16_to_datetime(self, epoch0, epoch1):
    '\n        Converts a CDF epoch16 value to a datetime\n\n        .. note::\n            The call signature has changed since SpacePy 0.1.2. Formerly\n            this method took a single argument with two values; now it\n            requires two arguments (one for each value). To convert existing\n            code, replace ``epoch16_to_datetime(epoch)`` with\n            ``epoch16_to_datetime(*epoch)``.\n\n        Parameters\n        ==========\n        epoch0 : float\n            epoch16 value from CDF, first half\n        epoch1 : float\n            epoch16 value from CDF, second half\n\n        Raises\n        ======\n        EpochError : if input invalid\n\n        Returns\n        =======\n        out : :class:`datetime.datetime`\n            date and time corresponding to epoch. Invalid values are set to\n            usual epoch invalid value, i.e. last moment of year 9999.\n\n        See Also\n        ========\n        v_epoch16_to_datetime\n        '
    yyyy = ctypes.c_long(0)
    mm = ctypes.c_long(0)
    dd = ctypes.c_long(0)
    hh = ctypes.c_long(0)
    min = ctypes.c_long(0)
    sec = ctypes.c_long(0)
    msec = ctypes.c_long(0)
    usec = ctypes.c_long(0)
    nsec = ctypes.c_long(0)
    psec = ctypes.c_long(0)
    self._library.EPOCH16breakdown((ctypes.c_double * 2)(epoch0, epoch1), ctypes.byref(yyyy), ctypes.byref(mm), ctypes.byref(dd), ctypes.byref(hh), ctypes.byref(min), ctypes.byref(sec), ctypes.byref(msec), ctypes.byref(usec), ctypes.byref(nsec), ctypes.byref(psec))
    if (yyyy.value <= 0):
        return datetime.datetime(9999, 12, 13, 23, 59, 59, 999999)
    micro = int((((((float(msec.value) * 1000) + float(usec.value)) + (float(nsec.value) / 1000)) + (float(psec.value) / 1000000.0)) + 0.5))
    if (micro < 1000000):
        return datetime.datetime(yyyy.value, mm.value, dd.value, hh.value, min.value, sec.value, micro)
    else:
        add_sec = int((micro / 1000000))
        try:
            return (datetime.datetime(yyyy.value, mm.value, dd.value, hh.value, min.value, sec.value, (micro - (add_sec * 1000000))) + datetime.timedelta(seconds=add_sec))
        except OverflowError:
            return datetime.datetime(datetime.MAXYEAR, 12, 31, 23, 59, 59, 999999)