2016-04-09 30 views
2

kod parçasının istisnasının istisnasının altında ... Burada yanlış bir şey yapıyorum? yıl durdurmak için nereye ayrıştırıcı bilmiyor uuuu yukarıda açıklamada belirtildiği Jon Skeet gibiJava 8 LocalDateTime ve DateTimeFormatter

DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern(
             "ddMMuuuuHHmmssSSS" 
            );  
    String currentTime=FORMATTER.format(LocalDateTime.now()); 
    System.out.println(currentTime); 
    LocalDateTime parsedTime=LocalDateTime.parse(currentTime,FORMATTER); 


09042016161444380 
Exception in thread "main" java.time.format.DateTimeParseException: Text '09042016161444380' could not be parsed at index 4 
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) 
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) 
at java.time.LocalDateTime.parse(LocalDateTime.java:492) 
+3

* Sorun şu ki çözümleyici yılın nerede duracağını bilmiyor - 2016'dan ziyade 20161 olabilir. Tarih ve saat bölümleri arasında bir “T” harfi eklerseniz, Eserleri. Şahsen ben kesinlikle bir ISO-8601 formatı kullanmanızı öneririm eğer mümkünse ... –

+0

teşekkürler Jon ama ayrıştırıcı, o yılın 4 char olduğunu söyleyen paterni okumalı, dolayısıyla 2016'da durmalıdır. – Krishan

+3

@Krishan no, not kesinlikle. 4 ya da daha fazla, kelimenin tam anlamıyla yorumlanması anlamına gelir, bu yüzden yıl içinde “2016161444380” olarak ayrılacaktır. –

cevap

2

. Bunun nedeni, 2 u's veya y's'un, ayrıştırıcı tarafından tam anlamıyla yorumlanmasıdır. Year ait JavaDoc'u itibaren

: desen harf sayısı 2'den fazla ise

ayrıştırma için, yıl basamak sayısına bakılmaksızın anlamıyla yorumlanır. Yani deseni "AA/gg/yyyy" seçeneğini kullanarak, "01/11/12" nda olduğu gibi ddMMuuuuHHmmssSSS den ddMMuuHHmmssSSS veya ddMMyyHHmmssSSS değiştirirseniz sorun çıkmaması gerekir,

Dolayısıyla Jan 11, 12 AD ayrıştırır Bu örnekte ayrıştırıcı tam olarak nerede duracağını bilir.