如何使用可选的秒参数创建 DateTimeformatter
How to create DateTimeformatter with optional seconds arguments
我正在尝试创建一个 DateTimeformatter
来验证以下日期时间:
String date1 = "2017-07-06T17:25:28";
String date2 = "2017-07-06T17:25:28.1";
String date3 = "2017-07-06T17:25:28.12";
String date4 = "2017-07-06T17:25:28.123";
String date5 = "2017-07-06T17:25:28.1234";
String date6 = "2017-07-06T17:25:28.12345";
String date7 = "2017-07-06T17:25:28.123456";
String date8 = "2017-07-06T17:25:28.";
我已尝试使用以下日期时间格式化程序来验证以上日期:
public static final String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
DateTimeFormatter formatter1 = new DateTimeFormatterBuilder()
.appendPattern(DATE_TIME_FORMAT_PATTERN)
.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
.toFormatter();
它适用于上述所有日期,但根据我的要求,它应该因 java.time.format.DateTimeParseException
而失败 date8
。
注意:我知道我可以使用以下格式化程序实现预期结果:
DateTimeFormatter formatter2 = DateTimeFormatter
.ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSSSSS][.SSSSS][.SSSS][.SSS][.SS][.S]");
但是我想知道通过改变formatter1
能达到预期的效果吗?
为了解析我使用的日期:
LocalDateTime.parse(date1, formatter1);
尝试将 minWidth
设置为 1,即 .appendFraction(ChronoField.MICRO_OF_SECOND, 1, 6, true)
。
您必须创建一个可选部分(使用 optionalStart()
和 optionalEnd()
方法)包含小数点后跟 1 到 6 位数字:
String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
DateTimeFormatter formatter1 = new DateTimeFormatterBuilder()
.appendPattern(DATE_TIME_FORMAT_PATTERN)
// optional decimal point followed by 1 to 6 digits
.optionalStart()
.appendPattern(".")
.appendFraction(ChronoField.MICRO_OF_SECOND, 1, 6, false)
.optionalEnd()
.toFormatter();
这将从 date1
解析为 date7
并抛出 java.time.format.DateTimeParseException
和 date8
。
这也是同样的方法:
String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
DateTimeFormatter formatter1 = new DateTimeFormatterBuilder()
.appendPattern(DATE_TIME_FORMAT_PATTERN)
// optional decimal point followed by 1 to 6 digits
.optionalStart()
.appendFraction(ChronoField.MICRO_OF_SECOND, 1, 6, true)
.optionalEnd()
.toFormatter();
我正在尝试创建一个 DateTimeformatter
来验证以下日期时间:
String date1 = "2017-07-06T17:25:28";
String date2 = "2017-07-06T17:25:28.1";
String date3 = "2017-07-06T17:25:28.12";
String date4 = "2017-07-06T17:25:28.123";
String date5 = "2017-07-06T17:25:28.1234";
String date6 = "2017-07-06T17:25:28.12345";
String date7 = "2017-07-06T17:25:28.123456";
String date8 = "2017-07-06T17:25:28.";
我已尝试使用以下日期时间格式化程序来验证以上日期:
public static final String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
DateTimeFormatter formatter1 = new DateTimeFormatterBuilder()
.appendPattern(DATE_TIME_FORMAT_PATTERN)
.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
.toFormatter();
它适用于上述所有日期,但根据我的要求,它应该因 java.time.format.DateTimeParseException
而失败 date8
。
注意:我知道我可以使用以下格式化程序实现预期结果:
DateTimeFormatter formatter2 = DateTimeFormatter
.ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSSSSS][.SSSSS][.SSSS][.SSS][.SS][.S]");
但是我想知道通过改变formatter1
能达到预期的效果吗?
为了解析我使用的日期:
LocalDateTime.parse(date1, formatter1);
尝试将 minWidth
设置为 1,即 .appendFraction(ChronoField.MICRO_OF_SECOND, 1, 6, true)
。
您必须创建一个可选部分(使用 optionalStart()
和 optionalEnd()
方法)包含小数点后跟 1 到 6 位数字:
String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
DateTimeFormatter formatter1 = new DateTimeFormatterBuilder()
.appendPattern(DATE_TIME_FORMAT_PATTERN)
// optional decimal point followed by 1 to 6 digits
.optionalStart()
.appendPattern(".")
.appendFraction(ChronoField.MICRO_OF_SECOND, 1, 6, false)
.optionalEnd()
.toFormatter();
这将从 date1
解析为 date7
并抛出 java.time.format.DateTimeParseException
和 date8
。
这也是同样的方法:
String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
DateTimeFormatter formatter1 = new DateTimeFormatterBuilder()
.appendPattern(DATE_TIME_FORMAT_PATTERN)
// optional decimal point followed by 1 to 6 digits
.optionalStart()
.appendFraction(ChronoField.MICRO_OF_SECOND, 1, 6, true)
.optionalEnd()
.toFormatter();