我需要创建一个
所有从
DateTimeFormatter
,用于以下有效日期。 String date1 = "2017-06-20T17:25:28";
String date2 = "2017-06-20T17:25:28.477777";
String date3 = "2017-06-20T17:25:28.477777Z";
String date4 = "2017-06-20T17:25:28.477777UTC";
String date5 = "2017-06-20T17:25:28.477777-05";
String date6 = "2017-06-20T17:25:28.477777+05";
String date7 = "2017-06-20T17:25:28.477777+05:30";
String date8 = "2017-06-20T17:25:28.477777-05:30";
String date9 = "2017-06-20T17:25:28.477777+0530";
String date10 = "2017-06-20T17:25:28.477777-0530";
我尝试了以下日期时间格式化程序,但对于最后两个日期(date9
,date10
)失败了。
private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss")
.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
.optionalStart().appendZoneId().optionalEnd()
.optionalStart().appendOffset("+HH", "+00").optionalEnd()
.optionalStart().appendOffset("+HH:mm", "+00:00").optionalEnd()
.optionalStart().appendOffset("+HHmm", "+0000").optionalEnd().toFormatter();
所有从
date1
到date8
的日期都可以正常工作,但是在尝试解析最后两个日期时出现了DateTimeParseException
:
Exception in thread "main" java.time.format.DateTimeParseException: Text '2017-06-20T17:25:28.477777+0530' could not be parsed, unparsed text found at index 29
我正在使用以下代码解析日期。
LocalDateTime.parse(date1, DATE_TIME_FORMATTER);
OffsetIdPrinterParser
的有效偏移量模式:
static final class OffsetIdPrinterParser implements DateTimePrinterParser {
static final String[] PATTERNS = new String[] {
"+HH", "+HHmm", "+HH:mm", "+HHMM", "+HH:MM", "+HHMMss", "+HH:MM:ss", "+HHMMSS", "+HH:MM:SS",
}; // order used in pattern builder
我无法理解为什么在使用有效的ZoneOffset模式时,我的最后两个日期失败了。
"cats".replaceFirst("cat|cats", "bird")
会得到birds
,而相反的顺序"cats".replaceFirst("cats|cat", "bird")
只会得到bird
。日期时间格式化程序甚至没有提供正则表达式中的OR,只是一系列可选部分的序列,因此我认为没有替代方案,只能按顺序尝试它们。 - Ole V.V.