使用 %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" ...
这取决于您使用的是什么以及您打算如何使用它。
Date
和 POSIXt
对象都相对于“1970-01-01 00:00:00 -00:00”。 Date
"integer" 值是一天,而 POSIXt
"integer" 值是一秒。
如果您使用的是 Date
s,那么为了使它在某种程度上可以转换,那么您应该添加前面的 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
请注意,这可能无法正确处理夏令时...
此代码导致儒略年默认为当前年份,但如何指定年份应为 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" ...
这取决于您使用的是什么以及您打算如何使用它。
Date
和 POSIXt
对象都相对于“1970-01-01 00:00:00 -00:00”。 Date
"integer" 值是一天,而 POSIXt
"integer" 值是一秒。
如果您使用的是 Date
s,那么为了使它在某种程度上可以转换,那么您应该添加前面的 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
请注意,这可能无法正确处理夏令时...