【问题标题】:Date format validating日期格式验证
【发布时间】:2017-04-04 12:13:57
【问题描述】:

我有以下方法来检查我的日期格式验证。

public static void main(String[] args) {
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX");
    String dateString = df.format(new Date());
    Validator validator = new Validator();
    System.out.println(dateString+" = "+validator.isTimesStampValid(dateString));
    String given = "2016­-09-­28T14:50:31.456449+06:00";
    System.out.println(given+" = "+validator.isTimesStampValid(given));
}

我得到如下结果,

2016-11-21T12:18:18.000698+05:30 = false
2016-­09­-28T14:50:31.456449+06:00 = true

我的日期格式验证正则表达式是这样的,^\d{4}­-\d{2}-­\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(\+|-­)\d{2}:\d{2}$

我无法弄清楚为什么我在验证后会得到两个不同的结果。 根据我的理解,givendateString 的值应该得到相同的结果。任何人都可以解释为什么我得到这个...

【问题讨论】:

  • 我本来希望 both 返回false,因为您的正则表达式在日期部分之间缺少-。 --- (\+|­) 应该匹配什么? + 还是什么都没有?但是如果时区是-03:00呢?
  • Ahhh 看起来您的正则表达式有“软连字符”(U+00AD)而不是正常的- 减号。哎呀!!投票结束为错字。
  • + 给安德烈亚斯。尝试使用:\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(\+|\ -)\d{2}:\d{2}
  • @Andreas,对不起,我在这里粘贴正则表达式时错过了它,现在我已经更新了。我也无法更改它是提供的正则表达式。
  • @Andreas,非常感谢你,我没有注意到连字符号。

标签: java regex validation datetime-format


【解决方案1】:

我只想提一下,你的正则表达式:

^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(\+|-)\d{2}:\d{2}$

匹配,根据regex101,提供的两个示例字符串以及我制作的其他几个字符串。

【讨论】:

    猜你喜欢
    • 2016-03-27
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2018-06-11
    • 2010-11-22
    • 2011-01-06
    相关资源
    最近更新 更多