此代码会导致儒略年默认为当前年份,但是我如何指定年份应为2011年呢?
fractionalDayofYear <-seq(300,302,0.1)
julianDate<- format(strptime((fractionalDayofYear), format='%j'),'%Y-%m-%d')
答案 0 :(得分:2)
这取决于您正在使用什么以及打算如何使用它。
Date
和POSIXt
对象均相对于“ 1970-01-01 00:00:00 -00:00”。 Date
“整数”值是一天,而POSIXt
“整数”值是一秒。
如果您使用Date
,则要使其具有某种可转换性,则应添加前一个Dec 31的“ int”(因为1月1日是朱利安第1天)。今天,那是
as.Date("2017-12-31")
# [1] "2017-12-31"
as.numeric(as.Date("2017-12-31"))
# [1] 17531
所以17531 + fractionalDayofYear
。
如果您使用的是POSIXt
,则需要做两件事:查找时间的数字部分,然后将“整数均值天”转换为秒:
as.POSIXct("2017-12-31")
# [1] "2017-12-31 PST"
as.numeric(as.POSIXct("2017-12-31"))
# [1] 1514707200
(3600*24*fractionalDayofYear) + 1514707200
请注意,这可能无法正确处理夏时制...
答案 1 :(得分:1)
使用as.difftime
可以更准确地添加天数+小数天数:
as.POSIXct("2010-12-31", tz="UTC") + as.difftime(fractionalDayofYear, units="days")
#[1] "2011-10-27 00:00:00 UTC" "2011-10-27 02:24:00 UTC" "2011-10-27 04:48:00 UTC" ...
如果您不关心工作日,则只需在其中粘贴“ 2011”即可:
as.Date(paste("2011",fractionalDayofYear), format="%Y %j")
# [1] "2011-10-27" "2011-10-27" "2011-10-27" "2011-10-27" "2011-10-27" ...