У меня даты и время хранятся в двух столбцах. Первый имеет дату как «20180831». Время сохраняется как количество секунд с полуночи; 3 утра будет храниться как 10 800.
Мне нужен объединенный столбец даты и времени, и мне трудно с чем-то простым.
Я могу получить даты без проблем, но lubridate "hms" интерпретирует поле времени как период, а не как "время" как таковое.
Я попытался преобразовать дату в формат posix.ct, а затем использовать ее в качестве источника для поля времени, но posix.ct не устанавливает время для полуночи, вместо этого оно устанавливает его на 1800 или 1900 часов в зависимости от даты , Мне нужно, чтобы он был установлен на полночь для всех рядов, я не хочу корректировать летнее время.
Вот код:
Сначала я сделал функцию, потому что есть несколько полей даты и времени, для которых я должен сделать это.
mkdate<-function(x){
a<-as.Date(as.character(x),format='%Y%m%d')
a<-as.POSIXct(a)
return(a)
}
df$date<-mkdate(df$date) #applies date making function to date field
df$datetime<-as.POSIXct(df$time,origin=df$date)
Я уверен, что это связано с часовыми поясами. Я нахожусь в центральном часовом поясе, и я экспериментировал с добавлением спецификации "tz" в эти команды как в функции mkdate, так и в временном коде, создающем столбец "datetime".
Я пробовал:
tz="America/Chicago"
tz="CST"
tz="UTC"
Помощь будет высоко ценится!
Отредактировано на примере:
x<-c(20180831,20180710,20160511,20170105,20180101) #these are dates.
as.POSIXct(as.Date(as.character(x),format="%Y%m%d"))
Выше код преобразует даты в секунды с 1 января 1970 года. Я мог бы преобразовать это в числовое значение и добавить свое значение «секунд» в это поле, НО это не правильно. Вот что я вижу вместо вывода:
[1] "2018-08-30 19:00:00 CDT" "2018-07-09 19:00:00 CDT" "2016-05-10 19:00:00 CDT" "2017-01-04 18:00:00 CST" "2017-12-31 18:00:00 CST"
Посмотрите на первое свидание - оно должно быть 8/31, но вместо этого - 8/30. Где-то там происходит корректировка часового пояса. Часы переводятся на 5 или 6 часов назад, потому что я в центральном времени Первая запись должна быть 2018-08-31 00:00:00. Затем я бы преобразовал его в числовое значение, добавил поле секунд и снова преобразовал его в формат POSIXct. Я попытался включить спецификацию tz повсюду без удачи.
Sys.getlocale("LC_TIME")
возвращает "English_United States.1252"