【发布时间】: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}$
我无法弄清楚为什么我在验证后会得到两个不同的结果。
根据我的理解,given 和dateString 的值应该得到相同的结果。任何人都可以解释为什么我得到这个...
【问题讨论】:
-
我本来希望 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