将UTC时间转换为包含星期和日期的本地时间

时间:2018-03-17 19:58:29

标签: r time utc strptime zone

我有以下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来说还不是新手。有人可能会解释一下如何做到这一点吗?非常感谢你。

1 个答案:

答案 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
>