日付に関する関数 Last modified: Feb 23, 2005
目的
二つの日付の間の経過日数,起算日付から何日後の日付,日付の曜日などを求める。
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 年は閏年。
蘊蓄ページ
直前のページへ戻る
E-mail to Shigenobu AOKI ( @si.gunma-u.ac.jp )