2016-05-09 13 views
0

Ich versuche, eine LocalDate von einer String mit strenger Auflösung in js-joda (Version 1.1.1) zu analysieren. Ich möchte keine Eingaben akzeptieren, die keine gültigen Daten sind, wie 2016-05-32. Aber ich verstehe es einfach nicht.Wie strenge LocalDate Parsing in js-joda zu tun?

Mein Code ist:

formatter = (new JSJoda.DateTimeFormatterBuilder) 
    .appendPattern("yyyy-MM-dd") 
    .toFormatter(JSJoda.ResolverStyle.STRICT); 

JSJoda.LocalDate.parse("2016-05-10", formatter); 

und der Fehler:

Text '2016-05-10' could not be parsed: Unable to obtain LocalDate from 
TemporalAccessor: [object Object], type DateTimeBuilder: 2016-05-10, 
at index: 0 

Der gleiche Code mit ResolverStyle.LENIENT oder ResolverStyle.SMART funktioniert, wie es für diese Modi erwartet wird.

formatter = (new JSJoda.DateTimeFormatterBuilder) 
    .appendPattern("yyyy-MM-dd") 
    .toFormatter(JSJoda.ResolverStyle.LENIENT); 

JSJoda.LocalDate.parse("2016-05-32", formatter); // result 2016-06-01 

Wie kann ich strenge Auflösung in js-joda verwenden?

JS Demo

aktualisieren:

jedoch die js-joda DateTimeFormatter API diese Option nicht erwähnen, das Muster uuuu-MM-dd von @JodaStephen vorgeschlagen funktioniert gut. Working Js Demo

js-joda api:

 
|Symbol |Meaning      |Presentation  |Examples 
|--------|----------------------------|------------------|--------------- 
| G  | era      | number/text  | 1; 01; AD; Anno Domini 
| y  | year      | year    | 2004; 04 
| D  | day-of-year    | number   | 189 
| M  | month-of-year    | number/text  | 7; 07; Jul; July; J 

Java api:

 
Symbol Meaning      Presentation  Examples 
    ------ -------      ------------  ------- 
    G  era       text    AD; Anno Domini; A 
    u  year      year    2004; 04 
    y  year-of-era     year    2004; 04 
    D  day-of-year     number   189 
+1

In Java müssen Sie Uuuu-MM-dd verwenden – JodaStephen

+0

Funktioniert wie ein Charme. Vielen Dank. Wenn du es als Antwort posten willst, werde ich es akzeptieren. Es kann auch für andere nützlich sein. –

Antwort

2

Das Muster "yyyy-MM-dd" ist unvollständig im Strict-Modus, da es nicht die Zeit liefert. Verwenden Sie stattdessen das Muster "uuuu-MM-dd".

0

Sie können einfach die Funktion LocalDate.parse ohne Angabe eines Formatierungsprogramms verwenden.

LocalDate.parse('2016-05-10'); // '2016-05-10' 

LocalDate.parse('2016-05-32'); // throws a DateTimeParseException