posix 时间加一年
Add one year to a posix time
我有一个类似于 "2016-01-01"
(YYYY-MM-DD) 的日期,我正在使用 as.numeric(as.POSIXct(...))
将其用作整数。
我的问题是,有没有办法在这个日期上加上一年、一个月或一天?
我的意思是,如果我在 2016 年增加一年,它不会与在 2015 年增加一年相同(bissextile 东西)。
1 月 1 日增加 32 天与 2 月 1 日增加 32 天不同(因为天数可能会发生变化)
我设法拥有了可以工作数年和数月的东西,但我也想实施 天
how_long_is_simul <- function(lst){
# Format DATE_START
greg_date = intDate_to_gregorianDate(DATE_START)
reg = "^([0-9]{4})\-([0-9]{2})\-([0-9]{2})$" # black-magic
splited_date = str_match(greg_date, reg)
# Manage months limit
lst$years = lst$years + floor(lst$months/12)
lst$months = lst$months%%12
# Build new date
my_vector = c(lst$years, lst$months, 0)
end_date = paste(as.numeric(splited_date[2:4]) + my_vector, collapse = "-")
return(round((gregorianDate_to_intDate(end_date)-DATE_START)/86400))
}
# AND the vars used by the function
DATE_START <- 1451606400 # 2016-01-01 GMT
lst = list( # no days, because of bissextile years
years = 1,
months = 0
)
基本上我所做的是从 DATE_START
整数将其转换为公历,然后添加 lst
中的月/年,然后重建一个干净的字符串并将其重新转换为整数。
N.B。转换 int <---> gregorian 是用 POSIXct
完成的
我不确定我是否解释得很好,但是还是谢谢你:)
使用 lubridate 包中的 %m+%
添加日、月或年非常简单:
library(lubridate)
x <- as.Date("2016-01-01")
x %m+% days(1)
给出:
[1] "2016-01-02"
要添加月份或年份,您可以使用 months
或 years
而不是 days
:
> x %m+% months(1)
[1] "2016-02-01"
> x %m+% years(1)
[1] "2017-01-01"
我有一个类似于 "2016-01-01"
(YYYY-MM-DD) 的日期,我正在使用 as.numeric(as.POSIXct(...))
将其用作整数。
我的问题是,有没有办法在这个日期上加上一年、一个月或一天? 我的意思是,如果我在 2016 年增加一年,它不会与在 2015 年增加一年相同(bissextile 东西)。
1 月 1 日增加 32 天与 2 月 1 日增加 32 天不同(因为天数可能会发生变化)
我设法拥有了可以工作数年和数月的东西,但我也想实施 天
how_long_is_simul <- function(lst){
# Format DATE_START
greg_date = intDate_to_gregorianDate(DATE_START)
reg = "^([0-9]{4})\-([0-9]{2})\-([0-9]{2})$" # black-magic
splited_date = str_match(greg_date, reg)
# Manage months limit
lst$years = lst$years + floor(lst$months/12)
lst$months = lst$months%%12
# Build new date
my_vector = c(lst$years, lst$months, 0)
end_date = paste(as.numeric(splited_date[2:4]) + my_vector, collapse = "-")
return(round((gregorianDate_to_intDate(end_date)-DATE_START)/86400))
}
# AND the vars used by the function
DATE_START <- 1451606400 # 2016-01-01 GMT
lst = list( # no days, because of bissextile years
years = 1,
months = 0
)
基本上我所做的是从 DATE_START
整数将其转换为公历,然后添加 lst
中的月/年,然后重建一个干净的字符串并将其重新转换为整数。
N.B。转换 int <---> gregorian 是用 POSIXct
完成的我不确定我是否解释得很好,但是还是谢谢你:)
使用 lubridate 包中的 %m+%
添加日、月或年非常简单:
library(lubridate)
x <- as.Date("2016-01-01")
x %m+% days(1)
给出:
[1] "2016-01-02"
要添加月份或年份,您可以使用 months
或 years
而不是 days
:
> x %m+% months(1)
[1] "2016-02-01"
> x %m+% years(1)
[1] "2017-01-01"