gpt4 book ai didi

R posixct 日期和时间不以午夜为中心

转载 作者:行者123 更新时间:2023-12-03 19:33:16 26 4
gpt4 key购买 nike

我将日期和时间存储在两列中。第一个的日期为“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)

我确定这与时区有关。我在中部时区,我已经尝试在 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”

最佳答案

我相信以下可以满足您的需求。
我的语言环境如下,所以结果与你的不同。

Sys.getlocale("LC_TIME")
#[1] "Portuguese_Portugal.1252"

差异将归因于夏令时,即夏令时。

至于你的问题,你所要做的就是记住类 "POSIXct 的对象。编码为自原点以来的秒数,该原点通常是 1970-01-01 的午夜。因此,您必须将自午夜以来的秒数添加到 as.Date 的秒数中。 .
x <- "20180831"

xd <- mkdate(x)
y <- 10800

as.POSIXct(as.integer(xd) + y, origin = "1970-01-01")
#[1] "2018-08-31 04:00:00 BST"

as.POSIXct(as.integer(xd) + y, origin = "1970-01-01", tz = "America/Chicago")
#[1] "2018-08-30 22:00:00 CDT"

关于R posixct 日期和时间不以午夜为中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52297125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com