Преобразование времени UTC в другой часовой пояс в R [дубликат]

По-видимому, в Windows 10 версии 1511 есть ошибка Powershell.

Ни один из исправлений, перечисленных здесь, не работал для меня. (или работал только временно)

Я исправил его (как в VS2013, так и VS2015), установив версию 1607. Его можно скачать здесь: Обновление для Windows 10 Anniversary .

Проблема с Nuget: https://github.com/NuGet/Home/issues/3352

24
задан David Smith 8 September 2009 в 18:07
поделиться

4 ответа

Сначала переведите лондонское время в объект 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: советы, трюки и ловушки

13
ответ дан David Smith 20 August 2018 в 09:58
поделиться
  • 1
    Формат преобразует объект posix в символ. – obesechicken13 10 December 2012 в 20:00
  • 2
    Поддерживает ли это преобразование настройки дневной экономии света? – Naresh S 7 September 2014 в 09:09
  • 3
    Да, он делает соответствующий приращение / декремент, если местоположение находится в базе данных часового пояса. – 42- 28 April 2015 в 14:47

Измените атрибут 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"
40
ответ дан Chris Holbrook 20 August 2018 в 09:58
поделиться

Если вы хотите сделать это в одной строке, напомните, что любой объект POSIXct в R - это просто число (секунды UTC с начала эпохи) и что «часовой пояс» - это просто атрибут, который определяет, как это число напечатано .

Поэтому мы можем использовать structure следующим образом:

x = as.POSIXct("2009-06-03 19:30", tz = "Europe/London")
structure(as.integer(x), class = class(x), tzone = 'America/Los_Angeles')
# [1] "2009-06-03 11:30:00 PDT"

as.integer разделяет класс и атрибуты x и structure позволяет нам перестроить / настроить их. class(x) является сокращением для c('POSIXct', 'POSIXt'); если ваш объект имеет миллисекунды, и вы хотите отслеживать их, вы можете использовать as.numeric(x).

0
ответ дан MichaelChirico 20 August 2018 в 09:58
поделиться

Пакет lubridate содержит две функции для преобразования часовых поясов. Согласно страницам справки:

force_tz возвращает дату-время с тем же самым часовым временем, что и x в новом часовом поясе.

force_tz(time, tzone = "America/Los_Angeles")

with_tz изменяет часовой пояс, в котором отображается момент. Время, отображаемое для мгновенных изменений, но момент времени, описанный, остается неизменным.

with_tz(time, tzone = "America/Los_Angeles")
21
ответ дан nnn 20 August 2018 в 09:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: