簡體   English   中英

根據時間查找日期

[英]Finding date based on time

我在考慮如何根據時間查找日期(表格中不存在)。

例子:記住,我只有時間

time = c("9:44","15:30","23:48","00:30","05:30", "15:30", "22:00", "00:45")

我知道開始日期是2014-08-28,但是我如何獲取午夜之后更改的日期。

預期結果將是

9:44   2014-08-28
15:30  2014-08-28
23:48  2014-08-28
00:30  2014-08-29
05:30  2014-08-29
15:30  2014-08-29
22:00  2014-08-29
00:45  2014-08-30

這是一個使用data.tableITime類的示例,它使您可以操縱時間(將time轉換為此類后,您現在可以減去/增加分鍾/小時/等)。

library(data.table)
time <- as.ITime(time)
Date <- as.IDate("2014-08-28") + c(0, cumsum(diff(time) < 0))

data.table(time, Date)
#        time       Date
# 1: 09:44:00 2014-08-28
# 2: 15:30:00 2014-08-28
# 3: 23:48:00 2014-08-28
# 4: 00:30:00 2014-08-29
# 5: 05:30:00 2014-08-29
# 6: 15:30:00 2014-08-29
# 7: 22:00:00 2014-08-29
# 8: 00:45:00 2014-08-30

使用chron包,我們假定稍后的時間在同一天,而較早的時間在第二天:

library(chron)
date <- as.Date("2014-08-28") + cumsum(c(0, diff(times(paste0(time, ":00"))) < 0))
data.frame(time, date)

贈送:

   time       date
1  9:44 2014-08-28
2 15:30 2014-08-28
3 23:48 2014-08-28
4 00:30 2014-08-29
5 05:30 2014-08-29
6 15:30 2014-08-29
7 22:00 2014-08-29
8 00:45 2014-08-30

這是一種實現方法:

time = c("9:44","15:30","23:48","00:30","05:30", "15:30", "22:00", "00:45")
times <- sapply(strsplit(time, ":", TRUE), function(x) Reduce("+", as.numeric(x) * c(60, 1)))
as.POSIXct("2014-08-28") + times + 60*60*24*cumsum(c(F, tail(times < lag(times), -1)))
# [1] "2014-08-28 00:09:44 CEST" "2014-08-28 00:15:30 CEST" "2014-08-28 00:23:48 CEST" "2014-08-29 00:00:30 CEST" "2014-08-29 00:05:30 CEST" "2014-08-29 00:15:30 CEST" "2014-08-29 00:22:00 CEST" "2014-08-30 00:00:45 CEST"

您可以將系統日期與時間連接起來並獲得結果。 例如,在Oracle中,我們可以將日期和時間作為:

to_char(sysdate,'DD-MM-RRRR')|| ' ' || To_char(sysdate,'HH:MIAM')

這將導致例如。 2015/12/9上午09:50

根據您的要求,將此用作:

 to_char(sysdate,'DD-MM-RRRR')|| ' 00:45' and so on.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM