R - 将POSIXct转换为朱利安日的分数

时间:2014-12-21 21:59:12

标签: r fractions posixct julian-date

如何将J中的日期/时间对象转换为朱利安日的分数?

例如,如何更改此日期:

date <- as.POSIXct('2006-12-12 12:00:00',tz='GMT')

成为这样的数字

> fjday
[1] 365.5
从1月1日算起的朱利安日。分数0.5表示它是下午12点,因此是一天中的一半。

这只是一个例子,但我的真实数据涵盖了2006年的所有365天。

3 个答案:

答案 0 :(得分:4)

由于您的所有日期都来自同一年(2006年),因此这应该非常简单:

julian(date, origin = as.POSIXct('2006-01-01', tz = 'GMT'))

如果您或其他读者碰巧将您的数据集扩展到其他年份,那么您可以按如下方式设置每年年初的原点:

sapply(date, function(x) julian(x, origin = as.POSIXct(paste0(format(x, "%Y"),'-01-01'), tz = 'GMT')))

答案 1 :(得分:2)

查看difftime功能:

> unclass(difftime('2006-12-12 12:00:00', '2006-01-01 00:00:00', tz="GMT", units = "days"))
[1] 345.5
attr(,"units")
[1] "days"

答案 2 :(得分:1)

POSIX转换为朱利安日的功能,是上述答案的延伸,在使用之前将其来源。

julian_conv <- function(x) { 
if (is.na(x)) { # Because julian() cannot accept NA values
  return(NA)
}
else {
j <-julian(x, origin = as.POSIXlt(paste0(format(x, "%Y"),'-01-01')))
temp <- unclass(j) # To unclass the object julian day to extract julian day
return(temp[1] + 1) # Because Julian day 1 is 1 e.g., 2016-01-01
}
}

示例:

date <- as.POSIXct('2006-12-12 12:00:00')
julian_conv(date)
#[1] 345.5