我正在尝试编写一个会扫描表格的脚本,而那些恰好在下午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")
}
}
我知道代码不起作用,但我只是想让你知道我的想法。
任何帮助表示赞赏!
答案 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)
我希望这有帮助!