У меня возникли проблемы с пониманием того, как обрабатываются строки времени в R и почему Sys.time()
использует другую строку, чем Sys.timezone()
?Понимание строк часового пояса в R
Sys.time()
возвращается:
[1] "2016-05-13 10:17:04 CEST"
as.POSIXct(Sys.time())
работы:
[1] «2016- 05-13 10:17:11 CEST "
И as.POSIXct("2016-05-1 10:15:21 CEST")
работает хорошо:
[1] "2016-05-01 10:15:21 CEST"
Однако as.POSIXct("2016-05-1 10:15:21", tz = "CEST")
делает НЕ работы:
[1 ] "2016-05-01 10:15:21 GMT"
Предупреждающие сообщения:
1: В strptime (xx, f < - "% Y-% m-% d% H:% M:% OS", tz = tz): неизвестный часовой пояс 'CEST' 2: В as.POSIXct.POSIXlt (х): неизвестный часовой пояс '' CEST
3: В strptime (X, F, TZ = TZ): Неизвестный часовой пояс '' CEST
4: В as.POSIXct.POSIXlt (as.POSIXlt (х, TZ, ...), TZ, ...): неизвестный часовой пояс 'CEST'
5: В as.POSIXlt.POSIXct (х, TZ): неизвестный часовой пояс 'CEST'
Я знаю, что я могу решить эту проблему с:
Sys.timezone(location = TRUE)
[1] "Европа/Берлин"
И as.POSIXct("2016-05-1 10:15:21", tz = Sys.timezone(location = TRUE))
возвращается:
[1] "2016-05-01 10:15:21 CEST"
Но я бы как понять, почему это работает так? И предположим, что у меня есть данные из другого часового пояса (например, Нью-Йорк), как я могу узнать, какую строку использовать?
Edit: Ответ на Мэтта и Адамса ссылку дал ответ на второй вопрос: часовые пояса можно посмотреть в Википедии или lubridate::olson.time.zones
.
Однако основной вопрос по-прежнему остается без ответа: почему «2016-05-01 10:15:21 CEST» действителен POSIXct class
, а as.POSIXct("2016-05-1 10:15:21", tz = "CEST")
невозможен.
Я нахожу это очень полезным. https://rstudio-pubs-static.s3.amazonaws.com/28038_1bcb9aa80ca84f27ace07d612872861a.html –
У меня есть хороший опыт работы с lubridate. Возможно, вы ищете [tz] (http://www.inside-r.org/packages/cran/lubridate/docs/tz)? – Christoph