【问题标题】:Using the "format" argument in as.Date() [duplicate]在 as.Date() 中使用“格式”参数 [重复]
【发布时间】:2017-04-13 13:11:14
【问题描述】:

我正在尝试使用 R 中的 as.Date() 将“07,29,30”转换为日期格式。

(注意字符串的格式为“mm,dd,yy”,即1930年7月29日)

所以我使用了以下代码:

as.Date("07,29,30", format = "%m,%d,%y")

但我回来的年份是 2030 年,而不是 1930 年。 如何告诉 R 将值转换为一个世纪前的日期?

【问题讨论】:

标签: r as.date


【解决方案1】:

因为 00 到 68 之间的年份值被编码为世纪的 20。 从strptime 文档看来,原因如下。

"没有世纪的年份 (00–99)。输入时,值 00 到 68 是前缀 20 和 69 到 99 到 19 – 这是 2004 年规定的行为 和 2008 POSIX 标准,但他们也说“预计在 从 2 位数年份推断的默认世纪的未来版本将 改变’。”

您可以使用下面的代码重新编码。

d <- as.Date("07,29,30", format = "%m,%d,%y")

> as.Date(ifelse(d > today(), format(d, "19%y-%m-%d"), format(d)))
[1] "1930-07-29"

【讨论】:

    【解决方案2】:

    无论如何我都会加入:

    # use this library
    library(lubridate)
    
    # convert to the format (your way or you acn use lubridate)
    dateconvert <- as.Date("07,29,30", format = "%m,%d,%y") 
    
    # get the year
    inputYear <- year(dateconvert)
    
    # convert the year
    year(dateconvert) <- ifelse(inputYear > 2000, 1900 + (inputYear %% 100), inputYear)
    

    【讨论】:

      【解决方案3】:

      尝试以下方法: format(as.Date("07,29,30", format = "%m,%d,%y"), "19%y-%m-%d")

      【讨论】:

        【解决方案4】:

        要解决此问题,请使用 strtotime()date()

        $originalDate = "2010-03-21";
        $newDate = date("d-m-Y", strtotime($originalDate));
        

        【讨论】:

        • 你的意思是strptime()吗?
        猜你喜欢
        • 2017-01-19
        • 2016-02-13
        • 2012-11-03
        • 2020-04-29
        • 1970-01-01
        • 2020-08-09
        • 2021-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多