我有以下2列作为更大数据框的一部分。 Timezone_Offset是当地时间(美国西海岸的数据I' m)的小时数差异。换句话说,UTC + Offset =本地时间。
我希望将UTC时间转换为当地时间,同时还可以根据需要正确更改星期几和日期。例如,这是两列的前5行。
UTC Timezone_Offset
Sun Apr 08 02:42:03 +0000 2012 -7
Sun Jul 01 03:27:20 +0000 2012 -7
Wed Jul 11 04:40:18 +0000 2012 -7
Sat Nov 17 01:31:36 +0000 2012 -8
Sun Apr 08 20:50:30 +0000 2012 -7
当周日和日期也必须改变时,事情变得棘手。例如,查看第一行,当地时间应该是星期六07:42:03 +0000 2012.在第二行,月份也必须更改。
对不起,我对R来说还不是新手。有人可能会解释一下如何做到这一点吗?非常感谢你。
答案 0 :(得分:2)
解析为UTC,然后以秒为单位应用偏移量,即时间60 * 60:
data <- read.csv(text="UTC, Timezone_Offset
Sun Apr 08 02:42:03 +0000 2012, -7
Sun Jul 01 03:27:20 +0000 2012, -7
Wed Jul 11 04:40:18 +0000 2012, -7
Sat Nov 17 01:31:36 +0000 2012, -8
Sun Apr 08 20:50:30 +0000 2012, -7", stringsAsFactors=FALSE)
data$pt <- as.POSIXct(strptime(data$UTC, "%a %b %d %H:%M:%S %z %Y", tz="UTC"))
data$local <- data$pt + data$Timezone_Offset*60*60
结果:
> data[,3:4]
pt local
1 2012-04-08 02:42:03 2012-04-07 19:42:03
2 2012-07-01 03:27:20 2012-06-30 20:27:20
3 2012-07-11 04:40:18 2012-07-10 21:40:18
4 2012-11-17 01:31:36 2012-11-16 17:31:36
5 2012-04-08 20:50:30 2012-04-08 13:50:30
>