Как получить .POSIXct, чтобы не менять часовой пояс строки? - PullRequest
0 голосов
/ 18 октября 2018

Это вызывает у меня проблемы некоторое время.У меня есть столбец строк даты и времени, подобный этому:

"2016-09-13 22:27:37.320 UTC"

И я пытался привести их к объектам POSIXct, используя:

library(anytime)
final$contact <- as.POSIXct(anytime(final$contact, tz="UTC"))

Но это дает мне времякак если бы я преобразовал его из своего местного часового пояса (EST) в UTC, несмотря на то, что я включил UTC в строку, а затем указывал в любое время, что tz является UTC:

2016-09-14 02:27:37

Конечная конечная цельдля этого нужно передать их в следующее:

for (i in 1:NROW(final$first_rpc)){
    final$localcontact[i] <- format(final$contact[i],
                                    tz=as.character(final$timezone.x[i]),
                                    usetz = TRUE)
}

, чтобы каждый раз использовать свой соответствующий часовой пояс вместо UTC (именно так данные хранятся в нашей базе данных).

Этоо четвертой версии этого я пробовал, и я действительно не представляю, как заставить это работать так, как мне хотелось бы, где строка там преобразуется в объект POSIXct, все еще в UTC.Есть ли способ заставить anytime / as.POSIXct понять, что они уже в UTC?

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Я думаю, вам нужно включить параметры usetz и tz, чтобы получить as.POSIXct в соответствии с обозначением UTC.Форматы% z и% Z предназначены только для вывода:

as.POSIXct(x, format = "%Y-%m-%d %H:%M:%S", usetz=TRUE, tz="UTC")
#[1] "2016-09-13 22:27:37 UTC"

`в любое время (из пакета с тем же именем) использует разные имена параметров:

anytime::anytime(x, asUTC=TRUE)
[1] "2016-09-13 15:27:37 PDT"  # value came in as UTC but the default print output is local
anytime::anytime(x, asUTC=TRUE, tz="UTC")  # overrides local tz conversion
[1] "2016-09-13 22:27:37 UTC"

Как и ваша безымянная база данных (возможно доморощенный) R хранит все объекты даты и времени как UTC, и только на выходе применяется обозначение часового пояса.Если у вас есть смесь часовых поясов, вам нужно будет предварительно обработать их и сохранить связанный исходный TZ как символьные значения перед отправкой на strptime или as.POSIXct, как вы уже ожидали.

0 голосов
/ 18 октября 2018

Нам не нужно указывать format здесь, так как оно уже в формате Date Time

as.POSIXct(str1, tz = "UTC")
#[1] "2016-09-13 22:27:37 EDT"

data

str1 <- "2016-09-13 22:27:37.320 UTC"
0 голосов
/ 18 октября 2018
x <- "2016-09-13 22:27:37.320 UTC"
as.POSIXct(x, format = "%Y-%m-%d %H:%M:%S", tz ='EST')
[1] "2016-09-13 22:27:37 EST"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...