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

When converting decimal date to julian with %j strptime, how do you specify the year?

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

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

使用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" ...

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

DatePOSIXt 对象都相对于“1970-01-01 00:00:00 -00:00”。 Date "integer" 值是一天,而 POSIXt "integer" 值是一秒。

如果您使用的是 Dates,那么为了使它在某种程度上可以转换,那么您应该添加前面的 12 月 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,那么您需要做两件事:找到时间的数字部分,并将您的 "integer-means-day" 转换为秒:

as.POSIXct("2017-12-31")
# [1] "2017-12-31 PST"
as.numeric(as.POSIXct("2017-12-31"))
# [1] 1514707200
(3600*24*fractionalDayofYear) + 1514707200

请注意,这可能无法正确处理夏令时...