我有两列存储日期和时间的数据。第一列存储日期,格式为“20180831”。时间以距午夜的秒数存储;例如,凌晨3点将存储为10800。
我需要一个合并的日期时间列,但是这件事情却很棘手。
我可以轻松获取日期,但 lubridate “hms” 将时间字段解释为一段时间,而不是真正的“时间”。
我尝试将日期转换为posix.ct格式,并将其用作时间字段的起始时间,但是posix.ct不会将时间设置为午夜,而是将其设置为1800或1900小时,具体取决于日期。我需要所有行的时间都设置为午夜,我不希望进行任何夏令时调整。
以下是代码: 首先,我创建了一个函数,因为我需要对多个日期和时间字段执行此操作。
上述代码将日期转换为从1970年1月1日开始算起的秒数。我可以将其转换为数字,并将我的“秒”值加入此字段,但这是不正确的。下面是输出结果:
我需要一个合并的日期时间列,但是这件事情却很棘手。
我可以轻松获取日期,但 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)
我相信这与时区有关。我在中部时区,尝试在mkdate函数和创建“datetime”列的时间代码中添加“tz”规范。
我尝试了以下命令:
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"))
上述代码将日期转换为从1970年1月1日开始算起的秒数。我可以将其转换为数字,并将我的“秒”值加入此字段,但这是不正确的。下面是输出结果:
[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"