如何检查时间戳的格式?

4

这是一个相当简单的问题,但我找不到答案。如果我有一些虚拟的时间戳:

foo <- strftime(Sys.time(), "%Y-%m-%dT%H:%M:%SZ")

使用格式:

"%Y-%m-%dT%H:%M:%SZ". 

我该如何检查 foo 是什么格式?我需要检查用户是否以正确的格式提交了时间戳,因此需要类似于以下代码:

if (func_bar(foo) != "%Y-%m-%dT%H:%M:%SZ") {stop("Complain")}

这个问题是否有内置的R函数可以解决?

更新:(为了更清晰)我知道我可以自动为用户更改格式,即只需转换提交的任何日期。但在这种特定情况下,我想要捕捉它。例如,我可以使用:

foo1 <- as.POSIXlt(Sys.time(), "UTC", "%Y-%m-%dT%H:%M:%S")

foo <- strftime(foo1, "%Y-%m-%dT%H:%M:%SZ")

为了将其格式化为正确的格式。

1
也许这个对你有用:https://dev59.com/iGvXa4cB1Zd3GeqPFAY9 - tushaR
2个回答

5

Sys.time() 默认输出当前时间为 POSIXct。我假设您的用户会提交一个字符时间。如果您尝试将其转换为 POSIXct,除非它具有您指定的精确格式,否则它将变成 NA。因此,像这样的内容将起作用:

if (is.na(as.POSIXct('2017-01-01 05:00:00', format = "%Y-%m-%dT%H:%M:%SZ"))) {

  stop('Date not in the right format')

}
#Error: Date not in the right format

0

我不知道有这样的函数。这是我的做法:

curr.time <- strftime(Sys.time(), "%Y-%m-%d")
if(!grepl('\\d{4}-\\d{2}-\\d{2}', as.character(curr.time))) {stop("Complain")}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接