【问题标题】:R difference between dates with different formatsR不同格式的日期之间的差异
【发布时间】:2015-04-23 08:53:11
【问题描述】:

我要做的是计算两个日期之间的总天数。如果日期是“yyyy/mm/dd”格式,我是这样做的:

EndDate <- "2012/02/01"
StartDate <- "1900/01/01"
DiffBewtweenDates <- data.frame(date=c(EndDate),start=c(StartDate))
DiffBewtweenDates$date_diff <- as.Date(as.character(DiffBewtweenDates$date), format="%Y/%m/%d")- 
as.Date(as.character(DiffBewtweenDates$start), format="%Y/%m/%d")
DiffBewtweenDates

它奏效了。但我被要求至少以这种格式“FullDayName, DayNumber of FullMonthName of FullYearNumber”获取 EndDate。类似于 “2012 年 2 月 1 日,星期日”

根据 R 手册的理解,应该是 ...format="%A, %d of %B of %Y" 但它不起作用,我不知道为什么。

提前感谢您的任何想法。

【问题讨论】:

  • 你是如何使用它的?如中,使用 as.Date 时,您提供的格式是输入字符串的格式,而不是输出的格式。

标签: r date format


【解决方案1】:

也许您必须将语言环境更改为英语:

Sys.setlocale("LC_TIME", "english")
date <- "Sunday, 1 of February of 2012"
lubridate::guess_formats(date, orders = "dmy")
#                 dmy 
# "%A, %d of %B of %Y"

as.Date(date, guess_formats(date, orders = "dmy"))
# [1] "2012-02-01"

无论如何,您可以使用 lubridate 的 guess_formats 函数来猜测许多日期字符串的格式。

【讨论】:

    【解决方案2】:

    只需计算天数差异并获得所需的输出即可

    Sys.setlocale("LC_TIME", "C") 
    EndDate <- as.Date("2012/02/01", format = "%Y/%m/%d")
    StartDate <- as.Date("1900/01/01", format = "%Y/%m/%d")
    
    EndDate - StartDate            
    # Time difference of 40938 days
    
    format(EndDate, "%A, %d of %B of %Y")
    # [1] "Wednesday, 01 of February of 2012"
    

    【讨论】:

      猜你喜欢
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 2016-09-20
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多