R无法识别日期时间值的时间分量

时间:2016-05-06 10:47:44

标签: r datetime time timestamp

我有一个数据框,其中一列列出了一堆日期时间。奇怪的是,该列的数据类型是“整数”。我需要将列强制转换为适当的日期时间数据类型,例如POSIXct,以便我可以从另一个字段中删除这些时间戳。但是,当我尝试将这些日期时间值强制转换为POSIXct时,它们会丢失时间组件。当我尝试在没有先强制转换到另一个数据类型的日期时间进行数学运算时,R就像时间戳的时间组件不在那里一样(它假设每个日期的时间都是午夜)。发生了什么以及如何修复它以便R识别时间戳?

> dates[1]
[1] 2016-05-05T16:46:21-04:00
48 Levels: 2016-05-03T06:45:42-04:00 2016-05-03T06:45:43-04:00 ... 2016-05-05T16:50:00-04:00
> typeof(dates)
[1] "integer"
> as.POSIXct(dates[1])
[1] "2016-05-05 EDT"
> as.character(dates[1])
[1] "2016-05-05T16:46:21-04:00"
> as.POSIXct(as.character(dates[1]))
[1] "2016-05-05 EDT"

1 个答案:

答案 0 :(得分:2)

您可以使用as.POSIXcttz参数将时间戳转换为正确的控制级别。

如果时区都是UTC-04:00并且是您当地的时区,您可以使用:

dates = as.POSIXct(dates, format="%Y-%m-%dT%H:%M:%S", tz=Sys.timezone())

如果它们都是UTC-04:00并且不是您当地的时区,但您知道确切的位置,那么您可以从tz database指定适当的时区:

dates = as.POSIXct(dates, format="%Y-%m-%dT%H:%M:%S", tz="America/Port_of_Spain")

或者,您可以使用通用的GMT-4时区:

dates = as.POSIXct(dates, format="%Y-%m-%dT%H:%M:%S", tz="Etc/GMT-4")

[编辑:感谢Roland在下面的评论。我最初使用strptime,它使用相同的语法,但返回POSIXlt个对象。]