【问题标题】:How to validate if the input matches a specific timestamp format?如何验证输入是否匹配特定的时间戳格式?
【发布时间】:2012-08-17 06:53:45
【问题描述】:

我需要检查输入是否与时间戳格式 yyyy-MM-dd'T'HH:mm:ss.SSS 匹配。

例如。 2012-08-16T11:07:10.793

我该怎么做?

【问题讨论】:

  • 不能直接将输入转换为日期对象,然后进行比较吗?
  • 你尝试过什么吗?还是用 Google 搜索?

标签: java regex validation formatting timestamp


【解决方案1】:
try {
    formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
    date = (Date) formatter.parse("2012-08-16T11:07:10.793");
} catch(ParseException e) {
    // It does not match your input
}

或者,像往常一样使用正则表达式...

编辑: 考虑了 maba 的拼写错误。

【讨论】:

  • 您当前的格式字符串将不起作用。试试看,如果你打印 date 变量,你会得到这个日期:Thu Aug 16 13:19:13 CEST 2012。您必须将格式字符串更改为yyyy-MM-dd'T'HH:mm:ss.SSS,大写S 毫秒。并将7933 更改为793,如他的示例所示。现在这个答案是错误的,为什么要投票?
【解决方案2】:

正则表达式:

^(\d{4})\D?(0[1-9]|1[0-2])\D?([12]\d|0[1-9]|3[01])(\D?([01]\d|2[0-3])\D?([0-5]\d)\D?([0-5]\d)?\D?(\d{3})?)?$

抱歉编辑迟了。 如果您只想检查日期的模式是否匹配,您可以像这样使用正则表达式:

    String date = "2012-08-16T11:07:10.793";
    String regex = "^(\\d{4})\\D?(0[1-9]|1[0-2])\\D?([12]\\d|0[1-9]|3[01])(\\D?([01]\\d|2[0-3])\\D?([0-5]\\d)\\D?([0-5]\\d)?\\D?(\\d{3})?)?$";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(date);

    if (m.matches()) {
        System.out.println("Yes it matches");
    } else {
        System.out.println("No match");
    }

【讨论】:

  • 正则表达式是正确的,但您应该详细说明 OP 应该如何使用它。也许是PatternMatcher 类的示例。
  • 您能否更新以上内容以包含以下格式的正则表达式:YYYY-MM-DDTHH:mm:SS.hhhZ ... 想想看,它应该以 Z 结尾吗?
猜你喜欢
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
相关资源
最近更新 更多