日付に関する関数     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 )

Made with Macintosh