如何在R中定义+/-登录as.difftime?

new*_*bie 7 r

我有表示时间偏移的字符串,有+-符号,例如:

string1 <- c("+00:30", "-07:00")

如何将这些as.difftime格式转换为格式?我知道如果没有迹象,我本来可以写as.difftime(string1, format = "%H:%M"),它会起作用.但是,我不知道如何处理这些迹象.我想使用结果difftime将UTC时间转换为LST.

我提前感谢您的时间和帮助.

Nic*_*edy 0

可以使用as.difftime和 来完成此format = "%z"操作,但存在一些问题。首先,冒号不是时区说明符的有效部分。其次,输出似乎与您当前的时区相关。这是一个绕过这些的函数:

tz_to_difftime <- function(x, zero = "+0000") {
  out <- as.difftime(c(zero, gsub("[: ]", "", x)),
                     format = "%z")
  out[1] - out[-1]
}
tz_to_difftime("+05:30")
Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用于当前 R 中最多 14 小时的差异(旧版本的差异较小)。

这是使用的替代方法strsplit

tz_to_difftime2 <- function(x) {
  as.difftime(sapply(strsplit(x, ":"),
    function(x) as.numeric(x) %*% c(1, 1/60)),
    units = "hours")
}
Run Code Online (Sandbox Code Playgroud)

如果你喜欢更管道的东西(使用magtittr

tz_to_difftime3 <- . %>%
  strsplit(":") %>%
  sapply(
    . %>%
    as.numeric %>%
    multiply_by_matrix(c(1, 1/60))
  ) %>%
  as.difftime(unit = "hours")
Run Code Online (Sandbox Code Playgroud)

最后两个的优点是可以花费任意小时。