如何在Java中验证DateTime字符串格式“2018-01-22T18:23:00.000Z”?

时间:2018-04-03 06:30:11

标签: java regex string datetime

我需要在我的代码中验证DateTime字符串2018-01-22T18:23:00.000Z的格式是否有效。

正则表达式解决方案或任何其他解决方案都很好。有人可以帮我这样做吗?

2 个答案:

答案 0 :(得分:3)

2018-01-22T18:23:00.000Z是即时的ISO 8601格式。所以你可以使用Instant.parse("2018-01-22T18:23:00.000Z")。从字符串无效的情况中捕获DateTimeParseException,因为它的格式错误或日期和时间无效(如第13个月或第25个小时)。它也会接受2018-01-22T18:23Z2018-01-22T18:23:00.000000000Z。对于大多数用途,这应该没问题,因为它仍然符合ISO 8601标准。

您可能想要添加范围检查。对于您的应用程序来说,过去或将来太远的时间可能被认为是无效的。使用Instant.isBefore()和/或Instant.isAfter()

不要使用正则表达式。对于维护代码的人来说,编写和非常非常复杂的阅读将会很复杂。如果您确实需要更详细的语法验证,请使用Akshay Batra’s answer中已提及的DateTimeFormatter

答案 1 :(得分:1)

创建一个名为“format”的字符串,并将所需的格式放在那里。之后尝试下面的代码并检查dt是否返回任何内容

DateTimeFormatter formatter = DateTimeFormat.forPattern(format);//required format
LocalDateTime dt = formatter.parse(oldstring);