Время, Удаляемое Из Даты-Времени При Преобразовании в Новый Часовой Пояс

#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.