'''

Conversion between ATNF BAT datetime

v0.1 9 November 2021

@author: Chris Phillips
'''
from datetime import datetime
from datetime import timedelta
from math import modf


def datetime2BAT(d):
    mjd = d.toordinal() - 678576
    mjd += ((((d.microsecond/1e6)+d.second)/60.0 + d.minute)/60.0 + d.hour)/24.0
    return int(mjd*24*60*60*1e6)

def currentBAT():
    return(datetime2BAT(datetime.utcnow()))

def BAT2datetime(bat):
    mjd = bat / (1e6*24*60*60)
    sec, imjd = modf(mjd)
    sec *= 60*60*24
    usec, sec = modf(sec)
    usec = int(usec*1e6)
    return datetime.fromordinal(int(mjd+678576))+timedelta(seconds=sec,microseconds=usec)
