我有一个格式为 dd-mm-yyyy HH:mm:ss
的日期
验证此日期的最佳和最简单的方法是什么?
我试过
d <- format.Date(date, format="%d-%m-%Y %H:%M:%S")
但是,当非法日期过去时,我怎样才能捕捉到错误呢?
最佳答案
如果在日期时间条目中需要灵 active ,这可能会有所帮助。
我有一个函数,我想允许仅日期条目或日期时间条目,然后设置一个标志 - 仅在函数内部使用。我称这个标志为 data_type
.稍后将在较大的函数中使用该标志来选择单位以获取两个日期之间的差异 difftime
. (在大多数情况下,该功能仅适用于日期,但在某些情况下,用户可能需要更短的时间范围。如果用户不需要,我不想用更短的时间范围给用户带来不便。)
我发布此内容有两个原因:1)帮助任何试图允许灵活使用日期参数的人,以及 2)欢迎在方法出现问题时进行完整性检查,因为这将进入 R 包中的函数。
dat_time_check_fn <- function(dat_time) {
if (!anyNA(as.Date(dat_time, format= "%Y-%m-%d %H:%M:%S"))) date_type <- 1
else if (!anyNA(as.Date(dat_time, format= "%Y-%m-%d"))) date_type <- 2
else stop("Error: dates must either be in format '1999-12-31' or '1999-12-31 23:59:59' ")
date_type
}
日期时间案例
date5 <- "1999-12-31 23:59:59"
date_type <- dat_time_check_fn(date5)
date_type
[1] 1
仅日期案例:
date6 <- "1999-12-31"
date_type <- dat_time_check_fn(date6)
date_type
[1] 2
请注意,如果函数中的上述顺序颠倒,较长的日期时间可能会无意中强制转换为较短的版本,并且两种类型都会导致 date_type = 1。
我较大的函数有多个日期,但我需要它们兼容。下面,我正在检查上面检查的两个日期,其中一个是类型 1,一个是类型 2。组合类型会给出仅包含日期的结果(类型 2):
date_type <- dat_time_check_fn(c(date5, date6))
date_type
[1] 2
这是一个不合规的版本:
date7 <- "1/31/2011"
date_type <- dat_time_check_fn(date7)
Error in dat_time_check_fn(date7) :
Error: dates must either be in format '1999-12-31' or '1999-12-31 23:59:59'
关于r - 如何在 R 中验证日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13450360/