Если у меня есть такая дата в Лондоне: "2009-06-03 19:30", как я могу преобразовать ее в эквивалентное время на Западном побережье США?
Как вы конвертируете даты/время из одного часового пояса в другой в R?
Ответ 1
Сначала преобразуйте лондонское время в объект POSIXct
:
pb.txt <- "2009-06-03 19:30"
pb.date <- as.POSIXct(pb.txt, tz="Europe/London")
Затем используйте format
для печати даты в другом часовом поясе:
> format(pb.date, tz="America/Los_Angeles",usetz=TRUE)
[1] "2009-06-03 11:30:00 PDT"
Есть несколько трюков для поиска правильного идентификатора часового пояса для использования. Подробнее в этом посте в блоге Revolutions: Преобразование часовых поясов в R: подсказки, трюки и подводные камни
Ответ 2
Измените атрибут tzone объекта POSIXct:
> pb.txt <- "2009-06-03 19:30"
> pb.date <- as.POSIXct(pb.txt, tz="Europe/London")
> attributes(pb.date)$tzone <- "America/Los_Angeles"
> pb.date
[1] "2009-06-03 11:30:00 PDT"
Обратите внимание, что это все еще объект POSIXct, tzone изменился, и было применено правильное смещение:
> attributes(pb.date)
$class
[1] "POSIXct" "POSIXt"
$tzone
[1] "America/Los_Angeles"
Ответ 3
Пакет lubridate
содержит две функции для преобразования часовых поясов. Согласно страницам справки:
force_tz
возвращает дату-время с таким же временем часов, что и x
в новом часовом поясе.
force_tz(time, tzone = "America/Los_Angeles")
with_tz
изменяет часовой пояс, в котором отображается момент. Время, отображаемое для мгновенных изменений, но момент времени, описанный, остается тем же.
with_tz(time, tzone = "America/Los_Angeles")
Ответ 4
Если вы хотите сделать это в одной строке, вспомните, что любой объект POSIXct
в R на самом деле является просто числом (секунды UTC с начала эпохи), и что "часовой пояс" - это просто атрибут, который определяет способ печати этого числа.
Поэтому мы можем использовать вспомогательную функцию .POSIXct
следующим образом:
x = as.POSIXct("2009-06-03 19:30", tz = "Europe/London")
.POSIXct(as.integer(x), tz = 'America/Los_Angeles')
# [1] "2009-06-03 11:30:00 PDT"
as.integer
удаляет класс и атрибуты x
, а .POSIXct
- это сокращение для создания объекта POSIXct; если ваш объект имеет миллисекунды и вы хотите отслеживать их, вы можете использовать as.numeric(x)
.