目的 二つの日付の間の経過日数,起算日付から何日後の日付,日付の曜日などを求める。 R には date や chron ライブラリーもあるので参照のこと。 使用法 J.day(yyyy, mm, dd) 西暦 yyyy 年,mm 月,dd 日に対するユリウス日を求める dw(jday) ユリウス日 jday が何曜日か求める date2(jday) ユリウス日 jday が,西暦何年何月何日かを求める 引数 yyyy 西暦年(4 桁) mm 月 dd 日 jday ユリウス日 ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/date.R", encoding="euc-jp") # ユリウス日から何曜日かを求める dw <- function(j) { c("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")[(j+1)%%7+1] } # 年月日からユリウス日を求める # 以下の式で,整数演算(%/%)がかけ算(*)やわり算(/)より優先順位が高いことに注意 J.day <- function(iy, jm, kd) { tmp <- -(jm < 3) kd-32075+(1461*(iy+4800+tmp))%/%4+(367*(jm-2-tmp*12))%/%12-(3*((iy+4900+tmp)%/%100))%/%4 } # ユリウス日を年月日に直す date2 <- function(jul) { l <- jul+68569 n <- (4*l)%/%146097 l <- l-(146097*n+3)%/%4 iy <- (4000*(l+1))%/%1461001 l <- l-(1461*iy)%/%4+31 jm <- (80*l)%/%2447 kd <- l-(2447*jm)%/%80 l <- jm%/%11 jm <- jm+2-12*l iy <- 100*(n-49)+iy+l sprintf("%4g/%02g/%02g", iy, jm, kd) } 使用例 J.day(2004, 3, 7) J.day(2000, 1, 1)-J.day(1900, 1, 1) dw(J.day(2004, 3, 7)) date2(J.day(2004, 2, 28)+1) 出力結果例 > J.day(2004, 3, 7) # 2004/03/07 のユリウス日は? [1] 2453072 > J.day(2000, 1, 1)-J.day(1900, 1, 1) # 20 世紀は何日あったのだろう? [1] 36524 > dw(J.day(2004, 3, 7)) # 2004/03/07 は何曜日? [1] "Sun" gt; date2(J.day(2004, 2, 28)+1) # 2004/02/28 の翌日は何日? [1] "2004/02/29" # 2004 年は閏年。 蘊蓄ページ