如何在R中将日期时间更改为第二天的特定时间?

时间:2018-03-28 14:11:34

标签: r

我正在尝试编写一个会扫描表格的脚本,而那些恰好在下午6点过后的脚本将会更改为第二天的早上6点。我尝试过使用lubridate包(ymd_hms),但问题是它迫使我指定一个日期(我想只使用当前的系统日期)。

我对R(和一般的编程)有点新意,所以我无法理解因素,变量和所有有效的方法。

endTime <- ymd_hms("x 18:00:00", tz = "America/Chicago")

理想情况下,我希望“x”采用系统日期(没时间),但是lubridate不会让我这样做,因为它只需要一个数字日期,它不会让我指定一些日期一个名字并使用它。

之后,这应该发生

for (Time in firstTen) {
  if (tables$Time > endTime ) {
    dateTime = ymd_hms("x+1 06:00:00")
  } 
}

我知道代码不起作用,但我只是想让你知道我的想法。

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

在这里你去交配

dateTime = ymd_hms( paste(Sys.Date()+1, "06:00:00", sep="-"))

编辑:关于更改时区的其他问题,您可以使用:(from here

require(lubridate)
dateTime = ymd_hms( paste(Sys.Date()+1, "06:00:00", sep="-"))
dateTime <- as.POSIXct(dateTime, tz="Europe/London")  
attributes(dateTime)$tzone <- "America/Los_Angeles"  
dateTime

答案 1 :(得分:0)

您可以使用

实现此目的
library(lubridate)
library(dplyr)

endTime <- ymd_hms(paste(Sys.Date(), "18:00:00"), tz = "America/Chicago")
test.data <- data.frame("Original.time" = endTime + minutes(round(rnorm(15, 1440, 2000))))

time.hours <- hour(test.data$Original.time) + 
  minute(test.data$Original.time)/60 + 
  second(test.data$Original.time)/3600
test.data$New.Time <- if_else(time.hours > 18,
                   ymd_hms(paste(date(test.data$Original.time)+1, "6:00:00"), tz = "America/Chicago"),
                   test.data$Original.time)

我希望这有帮助!