Есть ли простой способ добавить смещение часового пояса к существующей метке времени (все в UTC)?R добавить смещение часового пояса к классу POSIXct
Для простоты я использую Sys.time()
в моем примере, но в реальных данных я делаю DF$ts <- as.POSIXct(..., tz="GMT")
.
DF <- data.frame("ts" = rep(Sys.time(), 5),
"offset"=c("-11:00", "-12:00", "+01:30", "+02:00", "+02:30"))
# > DF
# ts offset
# 1 2015-09-02 14:35:31 -11:00
# 2 2015-09-02 14:35:31 -12:00
# 3 2015-09-02 14:35:31 +01:30
# 4 2015-09-02 14:35:31 +02:00
# 5 2015-09-02 14:35:31 +02:30
Прямо сейчас я выполняю строчные манипуляции, но я не думаю, что это изящно. Например,
offsetSeconds <- function(offset) {
time <- as.numeric(strsplit(offset, ":")[[1]])
seconds <- time[1] * 3600 + sign(time[1]) * time[2] * 60
return(seconds)
}
DF$seconds <- as.numeric(sapply(as.character(DF$offset), offsetSeconds))
DF$local_ts <- DF$ts + DF$seconds
# > DF
# ts offset seconds local_ts
# 1 2015-09-02 14:35:31 -11:00 -39600 2015-09-02 03:35:31
# 2 2015-09-02 14:35:31 -12:00 -43200 2015-09-02 02:35:31
# 3 2015-09-02 14:35:31 +01:30 5400 2015-09-02 16:05:31
# 4 2015-09-02 14:35:31 +02:00 7200 2015-09-02 16:35:31
# 5 2015-09-02 14:35:31 +02:30 9000 2015-09-02 17:05:31
Спасибо за ответ. Мои смещения временной шкалы всегда будут в формате смещений UTC, то есть он всегда будет в этом формате: '{+/-} {час}: {min}', например, '+11: 00',' -02: 30'. Есть ли функция для отображения '-04: 00' в' 'America/New_York''? – Boxuan
Я думаю, вы неправильно поняли. В примере два я просто использую «любой» TZ для форматирования; ключом этого ответа являются числовые смещения. И да, у моего пакета RcppBDT есть некоторые помощники часового пояса из Boost Date_Time, которые могут там помочь. –