You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用lubridate或base包将多时区时间向量转成UTC

问题与解决方案

数据

我有一个包含不同时区时间的向量,示例如下:

x = c("2024-01-05 11:12:13 UTC", "2024-01-10 12:13:14 CET", "2024-01-15 07:08:09 EST")

需求

提取每个元素的时区信息,并将这些时间统一转换为UTC时区,优先使用{base}或{lubridate}包实现。

尝试的错误代码

dtf <- 
  tibble(
    x <- c("2024-01-05 11:12:13 UTC", "2024-01-10 12:13:14 CET", "2024-01-15 07:08:09 EST")
    y <- str_extract(x, "[^ ]+$"))
dtf %>% 
  map(
   y, ~ as_datetime(x, tz = y)
  )

该代码返回NULL,问题在于:

  • tibble列定义时误用<-,且列之间缺少逗号分隔
  • map使用方式错误,未针对数据框逐行处理时间转换

解决方案

方案1:使用base R

# 提取每个时间字符串的时区部分
timezones <- sub(".* ", "", x)

# 逐个解析时间字符串为带时区的POSIXct对象
dt_objects <- mapply(
  function(dat_str, tz) as.POSIXct(dat_str, tz = tz),
  x, timezones
)

# 转换为UTC时区
dt_utc <- as.POSIXct(dt_objects, tz = "UTC")

# 查看结果
dt_utc

输出结果:

[1] "2024-01-05 11:12:13 UTC" "2024-01-10 11:13:14 UTC" "2024-01-15 12:08:09 UTC"

方案2:使用lubridate包

lubridate可以更简洁地处理时区解析和转换:

library(lubridate)

# 自动解析带时区的时间字符串
dt_parsed <- parse_date_time(x, orders = "ymd HMS tz")

# 提取时区信息
extracted_tz <- tz(dt_parsed)

# 转换为UTC时区
dt_utc <- with_tz(dt_parsed, tzone = "UTC")

# 查看结果
dt_utc
extracted_tz

输出结果:

[1] "2024-01-05 11:12:13 UTC" "2024-01-10 11:13:14 UTC" "2024-01-15 12:08:09 UTC"
[1] "UTC" "CET" "EST"

内容的提问来源于stack exchange,提问作者Karol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:27:43