R difftime关闭1年

时间:2018-03-13 13:34:12

标签: r

我正在尝试计算两个日期之间的年差。

time1 <- as.Date(x = "2017-02-14",
                 format = "%Y-%m-%d",
                 origin = "",
                 tz = "")

time2 <- as.Date(x = "1972-02-17",
                 format = "%Y-%m-%d",
                 origin = "",
                 tz = "")

as.integer(x = difftime(time1 = time1,
                        time2 = time2,
                        tz = "",
                        units = "days")) / 365

根据上述代码,年度差异约为45.02466。

对这两个日期的一瞥证实了这些年份的差异接近但不到45岁。

年份差异值应以44开头。

为什么difftime将年数增加1?

2 个答案:

答案 0 :(得分:1)

可能会发生这种情况,因为你除以365天,而至少44/4 = 11年的持续时间为366天。您可以考虑除以365.25,这是一年中更正确的平均持续时间。

此外,您可能希望查看lubridate包以查看两个日期之间经过多少年的间隔

library(lubridate)
> time1 <- as.Date(x = "2017-02-14",
+                  format = "%Y-%m-%d",
+                  origin = "",
+                  tz = "")
> 
> time2 <- as.Date(x = "1972-02-17",
+                  format = "%Y-%m-%d",
+                  origin = "",
+                  tz = "")
> 
> 
> interval(time2, time1) %/% years(1)
[1] 44

答案 1 :(得分:1)

由于闰年,一年平均有365.25天 - 如果年数不是4的倍数,可能会略有不同,但这是一个合理的长期平均值。通过使用365而不是在问题中夸大了答案。

time1 <- as.Date("2017-02-14")
time2 <- as.Date("1972-02-17")
as.numeric(time1 - time2) / 365.25
## [1] 44.99384

标准化年份

如果您想确切了解闰年,time1time2之间有12个闰天

tt <- seq(time2, time1, by = "day")
no_leap_days <- sum(format(tt, "%m-%d") == "02-29")
no_leap_days
## [1] 12

所以另一种方法是计算两个日期之间的天数,减去每年有效标准化为365天的闰天数,再除以365:

as.numeric(time1 - time2 - no_leap_days) / 365
## [1] 44.99178

注意

请注意,"Date"类没有时区,origin仅在as.Date中使用,如果参数为数字且问题中使用的格式为默认格式,则{不需要{1}}。