使用%j strptime将十进制日期转换为julian时,如何指定年份?

时间:2018-11-05 21:57:06

标签: r date strptime

此代码会导致儒略年默认为当前年份,但是我如何指定年份应为2011年呢?

fractionalDayofYear <-seq(300,302,0.1)
julianDate<-  format(strptime((fractionalDayofYear), format='%j'),'%Y-%m-%d')

2 个答案:

答案 0 :(得分:2)

这取决于您正在使用什么以及打算如何使用它。

DatePOSIXt对象均相对于“ 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" ...