我需要在代码中验证DateTime
字符串2018-01-22T18:23:00.000Z
的格式是否有效。
REGEX解决方案或其他任何解决方案都很好。有人可以帮助我这样做吗?
2018-01-22T18:23:00.000Z
是即时的ISO 8601格式。因此,您可以只使用Instant.parse("2018-01-22T18:23:00.000Z")
。从字符串无效的情况下捕获DateTimeParseException
,因为它的格式错误,或者日期和时间无效(例如13个月或小时25个月(。它也将接受2018-01-22T18:23Z
和2018-01-22T18:23:00.000000000Z
。对于大多数目的,这应该是可以的,因为它仍然允许在ISO 8601标准中。
您可能需要添加范围检查。对于您的申请,可能瞬息万变的瞬间或未来应该被认为是无效的。使用Instant.isBefore()
和/或Instant.isAfter()
。
不要使用正则表达式。编写和非常非常非常非常复杂的书籍将很复杂,以了解维护您的代码的人。如果您确实需要更详细的语法验证,请使用Akshay Batra答案中已经提到的DateTimeFormatter
。
创建一个称为"格式"的字符串,然后在此处放置所需的格式。之后,尝试以下代码,并检查DT是否返回任何内容
DateTimeFormatter formatter = DateTimeFormat.forPattern(format);//required format
LocalDateTime dt = formatter.parse(oldstring);