Как читать UTC метки времени с сервера Sql, используя RODBC в R? - PullRequest
1 голос
/ 20 сентября 2011

Я пытаюсь импортировать некоторые данные из Sql Server 2008 в R, используя RODBC с:

db <- odbcDriverConnect(connection = "Driver={SQL Server Native Client 10.0};Server=server; Database=db;Trusted_Connection=yes;")
results <- sqlQuery(db, "select timestamp from table where some-restriction")

Данные хранятся в столбце типа «дата / время». Все метки времени указаны в UTC, однако системный часовой пояс CET. R преобразует все временные метки в значения типа "POSIXct" "POSIXt", например:

"2011-01-01 07:24:12 CET"

"2011-01-01 08:35:10 CET"

"2011-01-01 09:02:50 CET"

метки времени верны, часовой пояс неверен. Мне кажется, что поскольку часовой пояс не указан явно, R назначает всем временным меткам мой местный часовой пояс.

Можно ли указать часовой пояс данных, чтобы информация о часовом поясе была правильной?

Ответы [ 2 ]

5 голосов
/ 20 сентября 2011

Вероятно, проще всего изменить часовой пояс впоследствии.

library(lubridate)
tz(results) <- "UTC"
4 голосов
/ 20 сентября 2011

До R 3.1.0, и когда этот ответ был первоначально написан:

Для объектов класса POSIXlt вы можете изменить атрибут tzone переменной сразу после импорта данных:

attr(results$timestamp,"tzone") <- "UTC"

Если ваши данные относятся к классу POSIXct, это изменит данные на смещение часового пояса, поэтому сначала преобразуйте в POSIXlt, заключив в as.POSIXlt():

results$timestamp <- as.POSIXlt(results$timestamp)

например:

tm <- as.POSIXlt(Sys.time())
tm
[1] "2011-09-20 13:45:01 BST"
attr(tm,"tzone") <- "UTC"
tm
[1] "2011-09-20 13:45:01 UTC"

Начиная с R 3.1.0 это поведение изменилось, чтобы использовать компонент объекта POSIXlt, а не атрибут, и на него косвенно ссылаются в новостях:

При печати даты и времени будет использоваться сокращение часового пояса в использовать в то время, если известно. Например, для Парижа до 1940 года это могло быть LMT, PMT, WET или WEST. Чтобы включить это, класс "POSIXlt" имеет необязательный компонент «зона», записывающий аббревиатуру для каждого элемента.

Так что теперь вы просто используете tm$zone <- "UTC"

...