【发布时间】:2013-02-22 19:53:05
【问题描述】:
我正在处理从 Teradata 导出的 .csv 数据。几列最初是带有时区的时间戳,因此在 R 中加载 .csv 后,我想将这些列(作为字符串加载)转换为 POSIXlt 或 POSIXct。我正在使用 strptime,但 .csv 文件中的时区格式与 strptime 的预期不匹配。例如,它需要 -0400,但 .csv 的格式为 -04:00,其中冒号分隔小时和分钟。
我可以删除冒号,但这是一个额外的步骤和复杂性,我希望尽可能避免。有没有办法告诉strptime 使用不同的时区格式(%z)?
这是一个例子:
## Example data:
x <- c("2011-10-12 22:17:13.860746-04:00", "2011-10-12 22:17:13.860746+00:00")
format <- "%Y-%m-%d %H:%M:%OS%z"
## Doesn't work:
strptime(x,format)
## [1] NA NA
## Ignores the timezone:
as.POSIXct(x)
## [1] "2011-10-12 22:17:13 EDT" "2011-10-12 22:17:13 EDT"
## Remove the last colon:
x2 <- gsub("(.*):", "\\1", x)
x2
## [1] "2011-10-12 22:17:13.860746-0400" "2011-10-12 22:17:13.860746+0000"
## This works, but requires extra processing (removing the colon)
strptime(x2,format)
## [1] "2011-10-12 22:17:13" "2011-10-12 18:17:13"
所以我希望使用strptime(x,"%Y-%m-%d %H:%M:%OS%zz") 之类的东西来实现最后一个结果,其中%zz 是识别-04:00 格式的时区的自定义表达式。或者%zH:%zM 可能会更好。
如果这是不可能的,是否有人具有将字符串(各种格式)转换为 data.frame/data.table 多列的日期的灵活/灵活的功能?
【问题讨论】:
标签: r timezone strptime string-to-datetime