是否有可能从R的默认日期格式转换为用户定义的格式(这里的"m/d/yyyy")并避免在结果日期中获得前导零?在下面的例子中,我想让date_2
看起来和date_1
一样。是否有一种方法可以使用format
或其他函数(理想情况下在一行代码中)做到这一点,或者我需要求助于gsub
来查找并删除date_2
中月份("09")和日期("05")前面的前导零?
我查看了DateTimeClasses
, strptime
, POSIXct
和format
的文档,但没有找到答案。
date_1<-"9/5/2008"
date_num<-as.Date(date_1,"%m/%d/%Y")
> date_num
[1] "2008-09-05"
date_2<-format(date_num,"%m/%d/%Y")
date_2
[1] "09/05/2008"
我们可以使用gsub
gsub('(?<=\/)0|^0', '', date_2, perl=TRUE)
#[1] "9/5/2008"
或者另一个版本是
gsub('0(?=[1-9]\/)', '', date_2, perl=TRUE)
#[1] "9/5/2008"
我们也可以转换为POSIXlt
类,然后提取组件,paste
它。
v1 <- as.POSIXlt(date_num)
paste(v1$mon+1L, v1$mday, v1$year+1900, sep='/')
#[1] "9/5/2008"
这里有一个直接从date_num
到您想要的结果的方法,使用chron包。
paste(chron::month.day.year(date_num), collapse = "/")
# [1] "9/5/2008"
这也适用于多个日期。代码略有不同,因为我们在这里需要do.call()
。
do.call(paste, c(chron::month.day.year(Sys.Date()-0:3), sep = "/"))
# [1] "10/9/2015" "10/8/2015" "10/7/2015" "10/6/2015"