- date_to_mjd(++DMY, ?MJD)
- Convert a date in day/month/year form to an MJD day number
- dwy_to_mjd(++DWY, ?MJD)
- Convert a DayOfWeek/WeekOfYear/Year representation to MJD
- dwy_to_mjd(++DWY, ++FirstWeekday, ?MJD)
- Convert a DayOfWeek/WeekOfYear/Year representation to MJD
- dy_to_mjd(++DY, ?MJD)
- Convert a DayOfYear/Year representation to MJD
- easter_mjd(+Year, ?MJD)
- Calculate Easter Sunday date for a given year
- jd_to_mjd(++JD, ?MJD)
- Convert Julian Dates (JD) to Modified Julian Dates (MJD)
- mjd_now(?MJD)
- Returns the current date/time as (float) MJD
- mjd_to_date(++MJD, ?DMY)
- Converts an MJD day number into the corresponding Day/Month/Year
- mjd_to_dow(?, ?)
- No description available
- mjd_to_dow(?, ?, ?)
- No description available
- mjd_to_dwy(++MJD, ?DWY)
- Convert an MJD to a DayOfWeek/WeekOfYear/Year representation
- mjd_to_dwy(++MJD, ++FirstWeekday, ?DWY)
- Convert an MJD to a DayOfWeek/WeekOfYear/Year representation
- mjd_to_dy(++MJD, ?DY)
- Convert an MJD to a DayOfYear/Year representation
- mjd_to_jd(++MJD, ?JD)
- Convert Modified Julian Dates (MJD) to Julian Dates (JD)
- mjd_to_time(++MJD, ?HMS)
- Extracts the time in H:M:S form from a float MJD
- mjd_to_unix(++MJD, ?UnixTime)
- Convert an MJD to the UNIX time representation
- mjd_to_weekday(++MJD, ?DayName)
- returns the weekday of the specified MJD as atom monday, tuesday etc
- mjd_to_ymd(++MJD, ?YMD)
- Converts an MJD day number into the corresponding ISO8601 Year-Month-Day form
- mjd_to_ywd(++MJD, ?YWD)
- Convert an MJD to ISO8601 Year-Week-Day representation
- time_to_mjd(++HMS, ?MJD)
- Convert the time in H:M:S form to a float MJD <1.0
- unix_to_mjd(++UnixTime, ?MJD)
- Convert the UNIX time representation into a (float) MJD
- ymd_to_mjd(++YMD, ?MJD)
- Convert a date in ISO8601 Year-Month-Day form to an MJD day number
- ywd_to_mjd(++DWY, ?MJD)
- Convert an ISO8601 Year-Week-Day representation to MJD
Here we use MJDs as the central representation (JDs are a bit awkward because they change at noon and are very large numbers).
Note that you can use fractional MJDs to denote the time of day. The time is then defined to be Universal Time (UT, formerly GMT). That means that every day has a unique integer number, or every time point has a unique float representation! (Using double floats, the resolution is better than 10 microseconds until the year 2576, and better than 100 microseconds until the year 24826).
Differences between times are obviously trivial to compute, and so are weekdays (by simple mod(7) operation).
The code is valid for dates starting from 1 Mar 0004 = MJD -677422 = JD 1722578.5
The relationship between JD and MJD is simply MJD = JD-2400000.5, ie MJD 0 = 17 Nov 1858.
[eclipse 1]: lib(calendar). [eclipse 2]: date_to_mjd(29/12/1959, MJD), mjd_to_weekday(MJD,W). MJD = 36931 W = tuesdayWhat date and time is it now?
[eclipse 3]: mjd_now(MJD), mjd_to_date(MJD,Date), mjd_to_time(MJD,Time). Date = 19 / 5 / 1999 MJD = 51317.456238425926 Time = 10 : 56 : 59.000000017695129How many days are there in the 20th century?
[eclipse 4]: N is date_to_mjd(1/1/2001) - date_to_mjd(1/1/1901). N = 36525The library code does not detect invalid dates, but this is easily done by converting a date to its MJD and back and checking whether they match:
[eclipse 5]: [user]. valid_date(Date) :- date_to_mjd(Date,MJD), mjd_to_date(MJD,Date). [eclipse 6]: valid_date(29/2/1900). % 1900 is not a leap year! no (more) solution.