Initial commit
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# tools/julian.py
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
import math
|
||||
|
||||
|
||||
def julian_date(date: datetime | None = None):
|
||||
"""Given any date in the future or past, return julian date"""
|
||||
if date is None:
|
||||
date = datetime.now()
|
||||
|
||||
time = date.timestamp() * 1000
|
||||
|
||||
offset = date.utcoffset()
|
||||
tzoffset = offset.total_seconds() // 60 if offset is not None else 0
|
||||
|
||||
return (time / 86400000) - (tzoffset / 1440) + 2440587.5
|
||||
|
||||
|
||||
def CJDN(date: datetime | None = None):
|
||||
return round(julian_date(date))
|
||||
|
||||
|
||||
def current_julian_date():
|
||||
"""Returns current julian date"""
|
||||
return julian_date()
|
||||
|
||||
|
||||
def tomorrow_julian_date():
|
||||
"""returns tomorrow's julian date"""
|
||||
date = datetime.now() + timedelta(days=1)
|
||||
return julian_date(date)
|
||||
|
||||
|
||||
def future_julian_date(hoursadd=0, minutesadd=0, secondsadd=0):
|
||||
"""defaults to current if no specifications made. HOURS, MINUTES, AND SECONDS CANNOT BE NEGATIVE"""
|
||||
date = datetime.now() + timedelta(
|
||||
hours=hoursadd, minutes=minutesadd, seconds=secondsadd
|
||||
)
|
||||
return julian_date(date)
|
||||
|
||||
|
||||
def epoch_days(date: datetime | None = None):
|
||||
"""returns days since Jan 1st, 2000. Negative if before this date"""
|
||||
return julian_date(date) - 2451545
|
||||
|
||||
|
||||
def day_percent(date: datetime | None = None):
|
||||
"""Returns decimal portion of Julian Date"""
|
||||
whole = julian_date(date)
|
||||
return whole - math.floor(whole)
|
||||
|
||||
|
||||
def from_julian(j):
|
||||
"""Returns datetime.datetime object given julian date J"""
|
||||
J1970 = 2440588
|
||||
dayMs = 24 * 60 * 60 * 1000
|
||||
return datetime.fromtimestamp((j + 0.5 - J1970) * dayMs / 1000.0)
|
||||
Reference in New Issue
Block a user