在java中验证ISO8601日期时间字符串的推荐方法是什么
我正在使用Java11。想知道在java中验证datetime字符串是否为ISO8601的最佳方法(最重要的是推荐的方法)在java中验证ISO8601日期时间字符串的推荐方法是什么,java,date,time,datetime-format,iso8601,Java,Date,Time,Datetime Format,Iso8601,我正在使用Java11。想知道在java中验证datetime字符串是否为ISO8601的最佳方法(最重要的是推荐的方法) 另外,如何将该字符串值与java.sql.Timestamp进行比较?假设您至少使用java 8,最简单的方法如下: private static boolean isIsoDate(String date) { try { Instant.from(DateTimeFormatter.ISO_INSTANT.parse(date));
另外,如何将该字符串值与java.sql.Timestamp进行比较?假设您至少使用java 8,最简单的方法如下:
private static boolean isIsoDate(String date) {
try {
Instant.from(DateTimeFormatter.ISO_INSTANT.parse(date));
return true;
} catch (DateTimeParseException e) {
//log the failure here
e.printStackTrace();
}
return false;
}
相反,您可以使用regex
验证格式,但这比上述方法要困难得多
至于您的另一个问题,最简单的方法是首先将日期字符串转换为具体的date
对象,然后按照此处的建议操作:
假设您至少在使用Java 8,最简单的方法如下:
private static boolean isIsoDate(String date) {
try {
Instant.from(DateTimeFormatter.ISO_INSTANT.parse(date));
return true;
} catch (DateTimeParseException e) {
//log the failure here
e.printStackTrace();
}
return false;
}
相反,您可以使用regex
验证格式,但这比上述方法要困难得多
至于您的另一个问题,最简单的方法是首先将日期字符串转换为具体的date
对象,然后按照此处的建议操作:
假设您至少在使用Java 8,最简单的方法如下:
private static boolean isIsoDate(String date) {
try {
Instant.from(DateTimeFormatter.ISO_INSTANT.parse(date));
return true;
} catch (DateTimeParseException e) {
//log the failure here
e.printStackTrace();
}
return false;
}
相反,您可以使用regex
验证格式,但这比上述方法要困难得多
至于您的另一个问题,最简单的方法是首先将日期字符串转换为具体的date
对象,然后按照此处的建议操作:
假设您至少在使用Java 8,最简单的方法如下:
private static boolean isIsoDate(String date) {
try {
Instant.from(DateTimeFormatter.ISO_INSTANT.parse(date));
return true;
} catch (DateTimeParseException e) {
//log the failure here
e.printStackTrace();
}
return false;
}
相反,您可以使用regex
验证格式,但这比上述方法要困难得多
至于您的另一个问题,最简单的方法是首先将日期字符串转换为具体的date
对象,然后按照此处的建议操作:
以后从java 8中可以使用
DateTimeFormatter
类来检查格式,因此我定义了一个方法来检查其是否为ISO格式:
boolean isValidISODateTime(String date) {
try {
java.time.format.DateTimeFormatter.ISO_DATE_TIME.parse(date);
return true;
} catch (java.time.format.DateTimeParseException e) {
return false;
}
}
在以后的java 8中,您可以使用
DateTimeFormatter
类来检查格式,因此我定义了一个方法来检查其是否为ISO格式:
boolean isValidISODateTime(String date) {
try {
java.time.format.DateTimeFormatter.ISO_DATE_TIME.parse(date);
return true;
} catch (java.time.format.DateTimeParseException e) {
return false;
}
}
在以后的java 8中,您可以使用
DateTimeFormatter
类来检查格式,因此我定义了一个方法来检查其是否为ISO格式:
boolean isValidISODateTime(String date) {
try {
java.time.format.DateTimeFormatter.ISO_DATE_TIME.parse(date);
return true;
} catch (java.time.format.DateTimeParseException e) {
return false;
}
}
在以后的java 8中,您可以使用
DateTimeFormatter
类来检查格式,因此我定义了一个方法来检查其是否为ISO格式:
boolean isValidISODateTime(String date) {
try {
java.time.format.DateTimeFormatter.ISO_DATE_TIME.parse(date);
return true;
} catch (java.time.format.DateTimeParseException e) {
return false;
}
}
事情太多了,所以我不打算写一个详尽的答案。我试图概述一下您可能会选择的选项。之后,你应该进一步研究相关的问题。在这样做之前,你可能需要研究什么是ISO8601,它有时是什么,有时不是什么
对于许多(大多数)目的来说,尝试使用内置的java.time(现代java日期和时间API)解析字符串将为您提供令人满意的验证,正如其他答案中所述。选项包括:
- 更简单、更经常:使用java.time中相应日期时间类的one-arg
方法。它们通常解析ISO 8601格式,如果字符串不是ISO 8601格式,则抛出parse
。根据字符串中需要显示的信息(日期和/或时间,UTC偏移量),例如,您可以使用DateTimeParseException
或OffsetDateTime.parse()
LocalDate.parse()
- 对于特殊或特殊需求,请使用
类的DateTimeFormatter
常量之一ISO_XXXX
OffsetDateTime.parse(CharSequence)
要求在UTC的偏移量中使用冒号(如果不是Z
),如+07:00
所示。ISO 8601还允许在不使用冒号的情况下写入偏移量,如+0700
中所示。如果您需要适应内置方法未涵盖的变体,那么构建您自己的DateTimeFormatter
可能是一个不错且不太复杂的解决方案。您可以使用模式的DateTimeForamtter.ofPattern
方法或DateTimeFormatterBuilder
isBefore
和isAfter
时间戳
,而您现在无法升级,请将每个API转换为,并使用或进行比较。下面是一个例子:
String yourIso8601String = "2020-11-17T02:51:39.375109+07:00";
Timestamp ts = Timestamp.from(Instant.parse("2020-11-16T19:00:00Z"));
OffsetDateTime odt = OffsetDateTime.parse(yourIso8601String);
boolean isBeforeTimestamp = odt.toInstant().isBefore(ts.toInstant());
System.out.println("Is the ISO 8601 string before the Timestamp? " + isBeforeTimestamp);
示例的输出为:
ISO 8601字符串是否在时间戳之前?假的
链接
- 解释如何使用java.time
- 有很多东西,所以我不打算写一个详尽的答案。我试图概述一下您可能会选择的选项。之后,你应该进一步研究相关的问题。也许在你这么做之前