suncasa.utils.jdutil

Functions for converting dates to/from JD and MJD. Assumes dates are historical dates, including the transition from the Julian calendar to the Gregorian calendar in 1582. No support for proleptic Gregorian/Julian calendars.

Author:

Matt Davis

Website:

http://github.com/jiffyclub

Classes

datetime

A subclass of datetime.datetime that performs math operations by first

Functions

mjd_to_jd(mjd)

Convert Modified Julian Day to Julian Day.

jd_to_mjd(jd)

Convert Julian Day to Modified Julian Day

date_to_jd(year, month, day)

Convert a date to Julian Day.

jd_to_date(jd)

Convert Julian Day to date.

hmsm_to_days([hour, min, sec, micro])

Convert hours, minutes, seconds, and microseconds to fractional days.

days_to_hmsm(days)

Convert fractional days to hours, minutes, seconds, and microseconds.

datetime_to_jd(date)

Convert a datetime.datetime object to Julian Day.

jd_to_datetime(jd)

Convert a Julian Day to an jdutil.datetime object.

timedelta_to_days(td)

Convert a datetime.timedelta object to a total number of days.

Module Contents

suncasa.utils.jdutil.mjd_to_jd(mjd)[source]

Convert Modified Julian Day to Julian Day.

Parameters:

mjd (float) – Modified Julian Day

Returns:

jd – Julian Day

Return type:

float

suncasa.utils.jdutil.jd_to_mjd(jd)[source]

Convert Julian Day to Modified Julian Day

Parameters:

jd (float) – Julian Day

Returns:

mjd – Modified Julian Day

Return type:

float

suncasa.utils.jdutil.date_to_jd(year, month, day)[source]

Convert a date to Julian Day.

Algorithm from ‘Practical Astronomy with your Calculator or Spreadsheet’,

4th ed., Duffet-Smith and Zwart, 2011.

Parameters:
  • year (int) – Year as integer. Years preceding 1 A.D. should be 0 or negative. The year before 1 A.D. is 0, 10 B.C. is year -9.

  • month (int) – Month as integer, Jan = 1, Feb. = 2, etc.

  • day (float) – Day, may contain fractional part.

Returns:

jd – Julian Day

Return type:

float

Examples

Convert 6 a.m., February 17, 1985 to Julian Day

>>> date_to_jd(1985,2,17.25)
2446113.75
suncasa.utils.jdutil.jd_to_date(jd)[source]

Convert Julian Day to date.

Algorithm from ‘Practical Astronomy with your Calculator or Spreadsheet’,

4th ed., Duffet-Smith and Zwart, 2011.

Parameters:

jd (float) – Julian Day

Returns:

  • year (int) – Year as integer. Years preceding 1 A.D. should be 0 or negative. The year before 1 A.D. is 0, 10 B.C. is year -9.

  • month (int) – Month as integer, Jan = 1, Feb. = 2, etc.

  • day (float) – Day, may contain fractional part.

Examples

Convert Julian Day 2446113.75 to year, month, and day.

>>> jd_to_date(2446113.75)
(1985, 2, 17.25)
suncasa.utils.jdutil.hmsm_to_days(hour=0, min=0, sec=0, micro=0)[source]

Convert hours, minutes, seconds, and microseconds to fractional days.

Parameters:
  • hour (int, optional) – Hour number. Defaults to 0.

  • min (int, optional) – Minute number. Defaults to 0.

  • sec (int, optional) – Second number. Defaults to 0.

  • micro (int, optional) – Microsecond number. Defaults to 0.

Returns:

days – Fractional days.

Return type:

float

Examples

>>> hmsm_to_days(hour=6)
0.25
suncasa.utils.jdutil.days_to_hmsm(days)[source]

Convert fractional days to hours, minutes, seconds, and microseconds. Precision beyond microseconds is rounded to the nearest microsecond.

Parameters:

days (float) – A fractional number of days. Must be less than 1.

Returns:

  • hour (int) – Hour number.

  • min (int) – Minute number.

  • sec (int) – Second number.

  • micro (int) – Microsecond number.

Raises:

ValueError – If days is >= 1.

Examples

>>> days_to_hmsm(0.1)
(2, 24, 0, 0)
suncasa.utils.jdutil.datetime_to_jd(date)[source]

Convert a datetime.datetime object to Julian Day.

Parameters:

date (datetime.datetime instance)

Returns:

jd – Julian day.

Return type:

float

Examples

>>> d = datetime.datetime(1985,2,17,6)
>>> d
datetime.datetime(1985, 2, 17, 6, 0)
>>> jdutil.datetime_to_jd(d)
2446113.75
suncasa.utils.jdutil.jd_to_datetime(jd)[source]

Convert a Julian Day to an jdutil.datetime object.

Parameters:

jd (float) – Julian day.

Returns:

dtjdutil.datetime equivalent of Julian day.

Return type:

jdutil.datetime object

Examples

>>> jd_to_datetime(2446113.75)
datetime(1985, 2, 17, 6, 0)
suncasa.utils.jdutil.timedelta_to_days(td)[source]

Convert a datetime.timedelta object to a total number of days.

Parameters:

td (datetime.timedelta instance)

Returns:

days – Total number of days in the datetime.timedelta object.

Return type:

float

Examples

>>> td = datetime.timedelta(4.5)
>>> td
datetime.timedelta(4, 43200)
>>> timedelta_to_days(td)
4.5
class suncasa.utils.jdutil.datetime[source]

Bases: datetime.datetime

A subclass of datetime.datetime that performs math operations by first converting to Julian Day, then back to a jdutil.datetime object.

Addition works with datetime.timedelta objects, subtraction works with datetime.timedelta, datetime.datetime, and jdutil.datetime objects. Not all combinations work in all directions, e.g. timedelta - datetime is meaningless.

See also

datetime.datetime

Parent class.

__add__(other)[source]

Add a datetime and a timedelta.

__radd__(other)[source]
__sub__(other)[source]

Subtract two datetimes, or a datetime and a timedelta.

__rsub__(other)[source]
to_jd()[source]

Return the date converted to Julian Day.

to_mjd()[source]

Return the date converted to Modified Julian Day.