Временная метка изменяется при записи кадра данных R в файл Excel в зависимости от смещения UTC

Я пытаюсь записать фрейм данных в файл Excel. Образец фрейма данных приведен ниже. Поскольку метка времени относится к классу factor, я конвертирую ее в формат POSIXct с помощью пакета lubridate.

library(lubridate)
library(xlsx)
df=structure(list(ts = structure(c(5L, 8L, 9L, 1L, 6L, 7L, 4L, 2L, 3L),
 .Label = c("01.09.2016 10:56:56", "01.09.2016 11:04:37", 
"01.09.2016 12:03:59", "02.09.2016 08:47:01", "30.08.2016 08:27:28", 
"30.08.2016 16:08:56", "31.08.2016 07:38:43", "31.08.2016 10:26:53",
"31.08.2016 10:37:40"), class = "factor")), .Names = "ts", 
row.names = c(NA,-9L), class = "data.frame")
df$ts = as.POSIXct(strptime(df$ts, "%d.%m.%Y %H:%M:%S"))
write.xlsx(df, "output.xlsx", sheetName="output")

Когда я пытаюсь записать фрейм данных в файл Excel с помощью команды write.xlsx, я получаю результат, в котором метка времени отличается от оригинала. Фрейм данных R и вывод в Excel

Видно, что время сдвинуто на два часа. Я живу в регионе, относящемся к часовому поясу UTC + 02: 00. Может ли это быть фактором, повлиявшим на изменение? Если да, есть ли способ предотвратить изменение информации о времени в Excel в соответствии со смещением UTC?


person Tony Rajan    schedule 09.09.2016    source источник
comment
df$ts = as.POSIXct(strptime(df$ts, "%d.%m.%Y %H:%M:%S"), tz = "UTC") возможно решит вашу проблему. Если не удалось, попробуйте tz = "GMT"   -  person cuttlefish44    schedule 09.09.2016
comment
df$ts = as.POSIXct(strptime(df$ts, "%d.%m.%Y %H:%M:%S"), tz = "GMT") решает проблему. Однако в моих исходных данных я не могу применить то же самое, поскольку метки времени уже находятся в форме Posixct. Я не могу заново прочитать данные в необработанном виде, так как данные были прочитаны из многих файлов за определенный период времени.   -  person Tony Rajan    schedule 20.09.2016


Ответы (1)


Данные в кадре данных R относятся к часовому поясу CEST. При записи в Excel Excel автоматически меняет часовой пояс на GMT, что вызывает сдвиг времени в Excel. Одним из способов решения проблемы является изменение часового пояса в R на GMT без изменения данных времени с помощью force_tz.

df$ts = as.POSIXct(strptime(df$ts, "%d.%m.%Y %H:%M:%S"))
Sys.setenv(TZ="")    
df$ts = force_tz(df$ts,tzone="GMT")
write.xlsx(df, "output.xlsx", sheetName="output")
person Tony Rajan    schedule 20.09.2016