我有表示时间偏移的字符串,有+和-符号,例如:
string1 <- c("+00:30", "-07:00")
如何将这些as.difftime格式转换为格式?我知道如果没有迹象,我本来可以写as.difftime(string1, format = "%H:%M"),它会起作用.但是,我不知道如何处理这些迹象.我想使用结果difftime将UTC时间转换为LST.
我提前感谢您的时间和帮助.
可以使用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)
最后两个的优点是可以花费任意小时。