Convert a POSIXt time (given as either the t
argument
or as the year
, month
, and other arguments) to a Julian day,
using the method provided in
Chapter 3 of Meeus (1982). It should be noted that
Meeus and other astronomical treatments use fractional days, whereas the
present code follows the R convention of specifying days in whole numbers,
with hours, minutes, and seconds also provided as necessary. Conversion is
simple, as illustrated in the example for 1977 April 26.4, for which Meeus
calculates julian day 2443259.9. Note that the R documentation for
julian()
suggests another formula, but the point of the present
function is to match the other Meeus formulae, so that suggestion is ignored
here.
Arguments
- t
a time, in POSIXt format, e.g. as created by
as.POSIXct()
,as.POSIXlt()
, ornumberAsPOSIXct()
, or a character string that can be converted to a time usingas.POSIXct()
. Ift
is provided, the other arguments are ignored.- year
year, to be provided along with
month
, etc., ift
is not provided.- month
numerical value for the month, with January being 1. (This is required if
t
is not provided.)- day
numerical value for day in month, starting at 1. (This is required if
t
is not provided.)- hour
numerical value for hour of day, in range 0 to 24. (This is required if
t
is not provided.)- min
numerical value of the minute of the hour. (This is required if
t
is not provided.)- sec
numerical value for the second of the minute. (This is required if
t
is not provided.)- tz
timezone
References
Meeus, Jean. Astronomical Formulas for Calculators. Second Edition. Richmond, Virginia, USA: Willmann-Bell, 1982.
See also
Other things related to astronomy:
angle2hms()
,
eclipticalToEquatorial()
,
equatorialToLocalHorizontal()
,
julianCenturyAnomaly()
,
moonAngle()
,
siderealTime()
,
sunAngle()
,
sunDeclinationRightAscension()
Other things related to time:
ctimeToSeconds()
,
julianCenturyAnomaly()
,
numberAsHMS()
,
numberAsPOSIXct()
,
secondsToCtime()
,
unabbreviateYear()
Examples
library(oce)
# example from Meeus
t <- ISOdatetime(1977, 4, 26, hour = 0, min = 0, sec = 0, tz = "UTC") + 0.4 * 86400
stopifnot(all.equal(julianDay(t), 2443259.9))