#r
Вопрос:
У меня есть фрейм данных, в котором столбец состоит из дат и времени, а другой-из различных часовых поясов. Я пытаюсь преобразовать время из UTC в соответствующий часовой пояс.
Проблема, с которой я сталкиваюсь, заключается в том, что существует одна конкретная дата и время, которые при преобразовании в другой часовой пояс, часть времени удаляется. Я пробовал несколько разных методов преобразования с одним и тем же результатом.
date <- lubridate::as_datetime('2018-08-07 04:00:00')
date
[1] "2018-08-07 04:00:00 UTC"
new_timezone <- "America/New_York"
Изначально я использовал пользовательскую функцию.
tz_v <- Vectorize(function(x,y) {format(x, tz=y, usetz=TRUE)})
tz_v(date, new_timezone)
[1] "2018-08-07 EDT"
Я использовал lubridate::with_tz()
lubridate::with_tz(date, new_timezone)
"2018-08-07 EDT"
Я также попробовал этот метод, который я нашел здесь (у меня нет ссылки).
date <- lubridate::as_datetime('2018-08-07 04:00:00')
raw <- as.POSIXct(strptime(date,
format = "%Y-%m-%d %H:%M:%S",
tz = "UTC"),
tz = "UTC")
converted <- as.POSIXlt(raw, tz = new_timezone)
converted
[1] "2018-08-07 EDT"
Все эти методы, похоже, работают с любым временем, КРОМЕ «04:00:00» по какой-то причине.
Комментарии:
1.
EDT
отстает от UTC на 4 часа. Итак, сейчас середина ночи. Согласно с?strptime
—The default for the format methods is "%Y-%m-%d %H:%M:%S" if any element has a time component which is not midnight, and "%Y-%m-%d" otherwise.