验证字符串是否采用有效的时间格式

Verifying if string is in a valid time format

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

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

如何验证时间是否有效?

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

无效,因为 isTime() 不存在。

要查明某个时间是否有效,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));

如果你想利用 Java,你可以使用它的 DateTimeFormatter class 并根据预期的模式滚动你自己的函数来验证(参见格式化和解析模式 in the API docs).

下面是一个简单的示例函数来执行此操作。如果模式匹配,则解析方法 returns DateTimeFormatter 对象成功。所以一个DateTimeFormatter object = true,一个 DateTimeParseException = 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