验证字符串是否为有效时间格式

时间:2020-07-24 06:18:59

标签: time coldfusion cfml

我知道如何验证某个日期是否有效

mydate = "1/2/2001";
writeoutput(isDate(mydate));

如何确认是否是有效时间?

mytime = "12:42 pm";
writeoutput(isTime(mytime));

由于isTime()不存在而无法使用。

2 个答案:

答案 0 :(得分:2)

如果您想利用Java,则可以利用其DateTimeFormatter类,并滚动自己的函数以根据期望的模式进行验证(请参见格式化和解析模式in the API docs)。

下面是一个简单的示例函数。如果模式匹配,则成功时parse方法将返回DateTimeFormatter对象。因此DateTimeFormatter object = trueDateTimeParseException = false。通过try / catch识别。

public boolean function isValidTimeFormat(required string value, required string pattern) {
    try {
        var DateTimeFormatter = createObject("java", "java.time.format.DateTimeFormatter");
        var format = DateTimeFormatter.ofPattern(arguments.pattern);
        var parse = format.parse(arguments.value);

        return true;
    }
    catch(java.time.format.DateTimeParseException e) {
        return false
    }
}

// Note that PM is capitalized as that is required for the pattern to match
writeDump(isValidTimeFormat("12:42 PM", "HH:mm a"));

Example on TryCF.com

答案 1 :(得分:1)

要确定某个时间是否有效,isDate()函数也可以工作。

mytime = "12:42 pm";
writeoutput(isDate(mytime));

更新

基于BKBK的反馈,我寻找了一种不接受太多变化的方法。我找到了

locale = getLocale();

writeOutput("Locale is: " & locale & "<br>");

// accepted
writeoutput(LSisDate("12:42 pm", locale));
writeoutput(LSisDate("12:42", locale));
writeoutput(LSisDate("22:00", locale));
writeoutput("<hr />");
// rejected
writeoutput(LSisDate("1a", locale));
writeoutput(LSisDate("2p", locale));
writeoutput(LSisDate("2:70", locale));
writeoutput(LSisDate("42:00", locale));
writeoutput("<hr />");
// rejected
writeoutput(LSisDate("12 42 pm", locale));
writeoutput(LSisDate("12 42", locale));
writeoutput(LSisDate("22 00", locale));