Преобразование из объекта Date в объект POSIXct - ошибка на один час - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь преобразовать объект даты (полученный из пользовательского ввода через Shiny) в объект POSIXct - я хочу понять, почему час добавляется к полученному объекту POSIXct, несмотря на то, что оба объекта имеюттот же часовой пояс.

См. Код ниже.Я пытался найти и ответить на Google или форуме Stackoverflow, но безуспешно.

> "2019-05-11" %>% as.Date(tz = "UTC") %>% as.POSIXct(tz = "UTC")
[1] "2019-05-11 01:00:00 BST"

> "2019-05-11" %>% as.Date(tz = "GMT") %>% as.POSIXct(tz = "GMT")
[1] "2019-05-11 01:00:00 BST"

Я ввел строки выше на консоли (RStudio).Я бы ожидал, что объекты POSIXct будут

"2019-05-11 00:00:00 BST". 

Кто-нибудь получил это?Я хочу избежать манипулирования приведенными выше результатами путем вычитания из объекта POSIXct в случае, если вышеуказанная проблема связана с моим компьютером (часы) и может не существовать на компьютере, где я собираюсь развернуть свое приложение Shiny.

Я не очень разбираюсь в R или компьютерах в целом, и я был бы благодарен за ответ без излишнего жаргона.

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Вам не нужно менять locales прямо сейчас. ?timezones выходы:

Регион часового пояса может быть известен под несколькими именами: например, «Европа / Лондон» также известен как GB, GB-Eire, Европа / Белфаст, Европа / Гернси, Европа / Isle_of_Man и Европа / Джерси.

Таким образом, мы можем использовать strftime после as.POSIXct и установить tz="GB" для обоих вызовов. Волшебно "BST" появляется как сокращение часового пояса после ожидаемого времени.

tm <- "2019-05-11"
strftime(as.POSIXct(tm, tz="GB"), format="%Y-%m-%d %H:%M:%S %Z", tz="GB")
# [1] "2019-05-11 00:00:00 BST"
0 голосов
/ 27 июня 2019

Выход находится в вашем местном часовом поясе, который выглядит как "BST" = GMT + 1, поэтому вы видите, что добавленный час

Вы можете добавить эту строку перед вашим кодом, чтобы сделать часовой пояс UTC

Sys.setenv(TZ="UTC")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...