Several previous posts have asked how to obtain Julian dates in R
. One post in particular really wanted ordinal dates and I posted an answer:
Convert a date vector into Julian day in R
I pointed out that my answer really provided ordinal dates rather than Julian dates. Today I tried to modify my answer to show how to obtain true Julian dates and I became confused when using the R
package chron
.
Below is R
code that generates a set of random dates and then attempts to obtain the corresponding Julian dates. Initially I tried to use the R
package chron
to create the Julian dates and the US Naval Observatory website to check my answers:
http://aa.usno.navy.mil/data/docs/JulianDate.php
My answers did not match.
Eventually I was able to obtain Julian dates that match those from the US Naval Observatory (after rounding off the decimal place) by using an equation from Wikipedia:
http://en.wikipedia.org/wiki/Julian_day
My question is: what am I doing wrong in chron
? How to I get Julian dates in chron
that match those obtained from the US Naval Observatory or that match those obtained with an equation from Wikipedia?
Thank you for any advice.
Here is my R code:
set.seed(1234)
n.dates <- 10
day <- sample( 25, n.dates, replace = TRUE)
month <- sample( 11, n.dates, replace = TRUE)
year <- sample(c(-4714:-1, 1:2014), n.dates, replace = TRUE)
year.b <- ifelse(year < 1, year+1, year)
a <- floor((14 - month) / 12)
y <- year.b + 4800 - a
m <- month + 12 * a - 3
#
# from Wikipedia:
# http://en.wikipedia.org/wiki/Julian_day
#
julian1 <- day + floor((153*m + 2)/5) + 365*y + floor(y/4) - floor(y/100) + floor(y/400) - 32045
julian2 <- day + floor((153*m + 2)/5) + 365*y + floor(y/4) - 32083
my.data <- data.frame(month, day, year, year.b, a, y, m, julian1, julian2, stringsAsFactors = F)
library(chron)
options(chron.origin = c(month=1, day=1, year= -4713))
my.data$my.julian <- julian(my.data$month, my.data$day, my.data$year)
my.data
#
# Note that julian2 matches the US Naval Observatory rounding off the decimal place.
#
# month day year year.b a y m julian1 julian2 my.julian
#1 8 3 -2584 -2583 0 2217 5 777853 777832 777815
#2 6 16 -2678 -2677 0 2123 3 743472 743450 743434
#3 4 16 -3644 -3643 0 1157 1 390587 390558 390549
#4 11 16 -4445 -4444 0 356 8 98242 98207 98203
#5 4 22 -3242 -3241 0 1559 1 537420 537394 537382
#6 10 17 740 740 0 5540 7 1991629 1991633 1991956
#7 4 1 -1178 -1177 0 3623 1 1291260 1291249 1291222
#8 3 6 1440 1440 0 6240 0 2247074 2247083 2247401
#9 3 17 880 880 0 5680 0 2042550 2042554 2042877
#10 3 13 -4407 -4406 0 394 0 111873 111838 111835
#
# According to the US Naval Observatory website, the julian dates are:
#
# The Julian date for BCE 2584 August 3 00:00:00.0 UT is JD 777831.500000
# The Julian date for BCE 2678 June 16 00:00:00.0 UT is JD 743449.500000
# The Julian date for BCE 3644 April 16 00:00:00.0 UT is JD 390557.500000
# The Julian date for BCE 4445 November 16 00:00:00.0 UT is JD 98206.500000
# The Julian date for BCE 3242 April 22 00:00:00.0 UT is JD 537393.500000
# The Julian date for CE 740 October 17 00:00:00.0 UT is JD 1991632.500000
# The Julian date for BCE 1177 April 1 00:00:00.0 UT is JD 1291614.500000
# The Julian date for CE 1440 March 6 00:00:00.0 UT is JD 2247082.500000
# The Julian date for CE 880 March 17 00:00:00.0 UT is JD 2042553.500000
# The Julian date for BCE 4407 March 13 00:00:00.0 UT is JD 111837.500000
#