在 R 中将字符和 UTC 偏移量转换为 POSIXct

Convert character and UTC offset to POSIXct in R

我在 R 中有以下数据:

times <- c("2015-03-08 00:00:00", "2015-03-08 01:00:00", "2015-03-08 02:00:00", "2015-03-08 03:00:00")
utcOffsets <- c(2, 1, 1, 1)
mydata <- data.frame(time=times, utcOffset=utcOffsets)

我的table中的utcOffset列表示每个数据值的时区偏移量。当我尝试使用 strptime 函数将我的数据转换为 POSIXct 时,我遇到了问题。由于某些原因,时间“2015-03-08 01:00:00”被转换为 NA。

as.POSIXct(strptime(mydata$time, "%Y-%m-%d %H:%M:%S"))

[1] "2015-03-08 00:00:00 MST" "2015-03-08 01:00:00 MST" NA
[4] "2015-03-08 03:00:00 MDT"

我怀疑夏令时有问题,我必须在 strptime 函数中指定时区。如果我所有数据的时区都是固定的,则以下代码对我有用:

as.POSIXct(strptime(mydata$time, "%Y-%m-%d %H:%M:%S", tz="Europe/Prague"))

[1] "2015-03-08 00:00:00 中欧" "2015-03-08 01:00:00 中欧" "2015-03-08 02:00:00 中欧" [4] "2015-03-08 03:00:00中欧

然而,在我的数据中,时区在我的 table 的 utcOffset 列中指定,例如 utcOffset=1 表示 GMT+1 或 utcOffset=2 表示 GMT+2。当我尝试使用 "GMT+n" 格式的时区代码时,我收到警告:

as.POSIXct(strptime(mydata$time, "%Y-%m-%d %H:%M:%S", tz="GMT+1"))

[1] "2015-03-08 00:00:00 GMT" "2015-03-08 01:00:00 GMT" "2015-03-08 02:00:00 GMT"
[4] "2015-03-08 03:00:00 GMT"
Warning messages:
1: In strptime(mydata$time, "%Y-%m-%d %H:%M:%S", tz = "GMT+1") :
  unknown timezone 'GMT+1'
2: In as.POSIXct.POSIXlt(strptime(mydata$time, "%Y-%m-%d %H:%M:%S",  :
  unknown timezone 'GMT+1'
3: In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'GMT+1'

如何使用 table 中的 utcOffset 信息将我的数据转换为 POSIXct?

感谢 oshun 的评论,我找到了问题的答案:

times <- c("2015-03-08 00:00:00", "2015-03-08 01:00:00", "2015-03-08 02:00:00", "2015-03-08 03:00:00")
utcOffsets <- c(2, 1, 1, 1)
mydata <- data.frame(time=times, utcOffset=utcOffsets)

# convert the times to POSIXct (use UTC as default timezone)
localTimes <- as.POSIXct(times, format="%Y-%m-%d %H:%M:%S", tz="GMT")
mydata$UTCTime <- localTimes + utcOffsets*3600