【发布时间】:2019-07-01 12:17:11
【问题描述】:
有没有办法让我在 R 中以日期时间格式解析以下字符串,其中不仅包括日期,还包括时区 (+08:00)。这里的时区实际上并不那么重要,但最好包括在内。我试过使用 as.Date 和 as.POSIXct ,但都让我不满意。我转换为日期时间的主要目的是能够按时间对它们进行排序,并在必要时按时间过滤数据框。
01 Jul 2019 12:56:43 +08:00
如果需要,我们很乐意提供更多信息。
【问题讨论】:
有没有办法让我在 R 中以日期时间格式解析以下字符串,其中不仅包括日期,还包括时区 (+08:00)。这里的时区实际上并不那么重要,但最好包括在内。我试过使用 as.Date 和 as.POSIXct ,但都让我不满意。我转换为日期时间的主要目的是能够按时间对它们进行排序,并在必要时按时间过滤数据框。
01 Jul 2019 12:56:43 +08:00
如果需要,我们很乐意提供更多信息。
【问题讨论】:
lubridate 包是解析(和使用)日期的绝佳选择:
library(lubridate)
dmy_hms("01 Jul 2019 12:56:43 +08:00")
【讨论】:
按照其他人的建议,使用 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"
...
【讨论】:
应该也可以使用基础 R as.POSIXct 和 strptime
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")
as.POSIXct("01 Jul 2019 12:56:43 +08:00", format = "%d %b %Y %T")#[1] "2019-07-01 12:56:43 +08"