2017-07-06 42 views
4

我想創建一個DateTimeformatter驗證以下日期時間:如何使用可選秒參數創建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.DateTimeParseExceptiondate8

注:我知道我可以實現與以下格式預期結果:

DateTimeFormatter formatter2 = DateTimeFormatter 
         .ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSSSSS][.SSSSS][.SSSS][.SSS][.SS][.S]"); 

但我想知道在formatter1改變這種才能實現預期的結果?

爲了解析我使用下列日期:

LocalDateTime.parse(date1, formatter1); 
+1

什麼是DATE_TIME_FORMATTER和DATE_TIME_FORMAT_PATTERN? –

+0

@PallaviSonal:謝謝,我已經更新了我的問題。 –

+0

@AmitGarg你爲什麼不接受我的回答?那是不是失敗了,我錯過了? – 2017-07-06 14:38:15

回答

6

必須創建包含小數點隨後用1到6位數字的可選部分(使用optionalStart()optionalEnd()方法):

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(); 

這解析從date1date7和投用date8一個java.time.format.DateTimeParseException


這也以同樣的方式:

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(); 
-2

儘量設置minWidth爲1,即.appendFraction(ChronoField.MICRO_OF_SECOND, 1, 6, true)

+2

然後它也會失敗OP「想要被解析的'」2017-07-06T17:25:28「 –

+0

是的,我意識到發佈答案後...... – jingx

相關問題