【问题标题】:Parsing time formats in R [duplicate]在R中解析时间格式[重复]
【发布时间】:2019-07-01 12:17:11
【问题描述】:

有没有办法让我在 R 中以日期时间格式解析以下字符串,其中不仅包括日期,还包括时区 (+08:00)。这里的时区实际上并不那么重要,但最好包括在内。我试过使用 as.Date 和 as.POSIXct ,但都让我不满意。我转换为日期时间的主要目的是能够按时间对它们进行排序,并在必要时按时间过滤数据框。

01 Jul 2019 12:56:43 +08:00

如果需要,我们很乐意提供更多信息。

【问题讨论】:

    标签: r date datetime


    【解决方案1】:

    lubridate 包是解析(和使用)日期的绝佳选择:

    library(lubridate)
    
    dmy_hms("01 Jul 2019 12:56:43 +08:00")
    

    【讨论】:

      【解决方案2】:

      按照其他人的建议,使用 lubridate 包中的 dmy_hms 函数,但请务必通过 tz 参数指定您希望使用的本地时区。

      lurbidate::dmy_hms("01 Jul 2019 12:56:43 +08:00", tz = "America/Chicago")
      
      R> dmy_hms(date, tz = "America/Chicago")
      Date in ISO8601 format; converting timezone from UTC to "America/Chicago".
      [1] "2019-06-30 23:56:43 CDT"
      

      有关可用时区的详细列表,请执行

      OlsonNames(tzdir = NULL)
      
      R> OlsonNames(tzdir = NULL)
        [1] "Africa/Abidjan"                   "Africa/Accra"                     "Africa/Addis_Ababa"              
        [4] "Africa/Algiers"                   "Africa/Asmara"                    "Africa/Asmera"                   
        [7] "Africa/Bamako"                    "Africa/Bangui"                    "Africa/Banjul"                   
       [10] "Africa/Bissau"                    "Africa/Blantyre"                  "Africa/Brazzaville"              
       [13] "Africa/Bujumbura"                 "Africa/Cairo"                     "Africa/Casablanca"               
       [16] "Africa/Ceuta"                     "Africa/Conakry"                   "Africa/Dakar"                    
       [19] "Africa/Dar_es_Salaam"             "Africa/Djibouti"                  "Africa/Douala"                   
       [22] "Africa/El_Aaiun"                  "Africa/Freetown"                  "Africa/Gaborone"                 
       [25] "Africa/Harare"                    "Africa/Johannesburg"              "Africa/Juba"                     
       [28] "Africa/Kampala"                   "Africa/Khartoum"                  "Africa/Kigali" 
      ...
      

      【讨论】:

      • 这是一个很好的提示!但是,这只会影响显示;在任何情况下,计算结果都是正确的。
      【解决方案3】:

      应该也可以使用基础 R as.POSIXctstrptime

      as.POSIXct("01 Jul 2019 12:56:43 +08:00", format = "%d %b %Y %T")
      

      strptime("01 Jul 2019 12:56:43 +08:00", format = "%d %b %Y %T")
      

      【讨论】:

      • 需要添加%z并从偏移中删除冒号:as.POSIXct(sub(":(..)$", "\\1", "01 Jul 2019 12:56:43 +09:00"), format = "%d %b %Y %T %z")
      • @G.Grothendieck 我很惊讶,但这对我仍然有效as.POSIXct("01 Jul 2019 12:56:43 +08:00", format = "%d %b %Y %T")#[1] "2019-07-01 12:56:43 +08"
      • 使用答案中的代码,在 Windows R 3.5.3 上,如果我将 +08:00 更改为 +09:00,我仍然会得到相同的结果。
      猜你喜欢
      • 2013-03-28
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      相关资源
      最近更新 更多