如何将带日期的英国时间向量转换为当地时间(时区偏移调整)
解决方案
以下是在R中将英国字符型时间转换为目标时区当地时间的具体操作:
1. 转换原始时间为带英国时区的时间对象
首先把字符格式的timestochange转换成R可识别的带时区时间对象,指定英国时区为"Europe/London",R会自动处理英国夏令时/冬令时的偏移:
# 定义原始时间向量 timestochange <- c("2023-04-24 07:49:00", "2023-04-24 07:53:00", "2023-04-24 07:56:00", "2023-04-24 08:01:00", "2023-04-24 09:12:00") # 转为带英国时区的POSIXct对象 uk_time <- as.POSIXct(timestochange, tz = "Europe/London")
2. 解析目标时区的UTC偏移
将tzchange的字符串偏移转为可计算的秒数(POSIXct时间以UTC秒数为存储单位):
tzchange <- "+2:00" # 提取偏移小时数并转为数值 offset_hours <- as.numeric(substr(tzchange, 1, 3)) # 转换为秒数 offset_seconds <- offset_hours * 3600
3. 计算目标时区时间
先将英国时间转为UTC时间,再加上目标时区的偏移,这种方式能规避夏令时切换的误差:
# 转换为UTC时间 utc_time <- as.POSIXct(uk_time, tz = "UTC") # 加上偏移得到目标当地时间 target_time <- utc_time + offset_seconds # 若需要转回字符格式,使用format函数 target_time_char <- format(target_time, "%Y-%m-%d %H:%M:%S")
运行后得到的目标时间结果为:
[1] "2023-04-24 08:49:00" "2023-04-24 08:53:00" "2023-04-24 08:56:00" [4] "2023-04-24 09:01:00" "2023-04-24 10:12:00"
更简便的方法(推荐)
如果你知道目标时区的标准名称(比如西班牙对应"Europe/Madrid"),可以使用lubridate包的with_tz函数,无需手动计算偏移,R会自动处理目标时区的夏令时:
library(lubridate) target_time <- with_tz(uk_time, tz = "Europe/Madrid")
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

