【问题标题】:How can I extract year from strptime?如何从 strptime 中提取年份?
【发布时间】:2015-08-12 19:19:24
【问题描述】:

我有这种格式的时间:

t <- "4/2/2004 12:45"

I can extract day and month using these two lines:

strptime(t, "%m/%d/%Y %H:%M", tz="UTC")$day
strptime(t, "%m/%d/%Y %H:%M", tz="UTC")$mday

但这并没有给我想要的岁月。我给了我没有世纪的年份:

strptime(t, "%m/%d/%Y %H:%M", tz="UTC")$year

我怎样才能准确地得到年份?像 1987 年、2012 年等。而不是 87 年和 12 年。

如果有任何其他功能可以用于此,我也可以。

【问题讨论】:

  • year(strptime(t, "%m/%d/%Y %H:%M", tz="UTC"))#[1] 2004
  • @akrun 不是lubridate 函数吗?
  • 我没有加载 lubridate,但已加载 data.tabledplyr
  • 啊,这也是data.table 函数。

标签: r datetime


【解决方案1】:

添加 1900。有关详细信息,请参阅 ?POSIXlt详细信息部分。

> tm <- "4/2/2004 12:45"
> strptime(tm, "%m/%d/%Y %H:%M", tz="UTC")$year
[1] 104
> strptime(tm, "%m/%d/%Y %H:%M", tz="UTC")$year + 1900
[1] 2004

【讨论】:

    【解决方案2】:

    使用lubridate 满足您所有直观的时间戳处理需求:

    library(lubridate)
    t <- "4/2/2004 12:45"
    t2 <- mdy_hm(t) # parsing format: month-day-year_hour-minute
    day(t2)
    yday(t2)
    year(t2)
    

    【讨论】:

    • 这很好。你能告诉我 Lubridate 是否是进行所有与日期时间相关的处理的建议方法吗?
    • lubridate 使解析和处理日期和时间变得更加容易,并通过使用简单易懂的语法帮助减少用户错误。没有“建议的方法”,但我发现它非常有用,而且它是一个流行的包。
    【解决方案3】:

    使用基础包:

    t <- "4/2/2004 12:45"
    as.numeric(format(as.Date(t, "%m/%d/%Y %H:%M", tz="UTC"), "%Y"))
    

    结果是:

    [1] 2004
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      相关资源
      最近更新 更多