, DateTimeParser ( , ).
DateTimeFormatterBuilder, ( , , , DateTimeFormat.forPattern()).
org.joda.time.format.DateTimeParser ( ):
DateTimeParser p1 = new DateTimeFormatterBuilder()
.appendYear(4, 4).toParser();
DateTimeParser p2 = new DateTimeFormatterBuilder()
.appendYear(4, 4)
.appendPattern("-MM-dd").toParser();
DateTimeParser p3 = new DateTimeFormatterBuilder()
.appendYear(4, 4)
.appendPattern(" MMM").toParser();
DateTimeFormatter:
// create array with all the possible patterns
DateTimeParser[] possiblePatterns = new DateTimeParser[] { p1, p2, p3 };
DateTimeFormatter parser = new DateTimeFormatterBuilder()
// append all the possible patterns
.append(null, possiblePatterns)
// use the locale you want (in case of month names and other locale sensitive data)
.toFormatter().withLocale(Locale.ENGLISH);
Locale.ENGLISH ( ). , ( MMM , Jan Sep). :
System.out.println(parser.parseLocalDateTime("2014"));
System.out.println(parser.parseLocalDateTime("201400"));
System.out.println(parser.parseLocalDateTime("2014-10-10"));
System.out.println(parser.parseLocalDateTime("201400-10-10"));
System.out.println(parser.parseLocalDateTime("2014 Jul"));
System.out.println(parser.parseLocalDateTime("201400 Jul"));
2014, . 201400, java.lang.IllegalArgumentException, :
java.lang.IllegalArgumentException: : "201400" "00"
DateTimeFormatter , , . (, static final).
, , , , . formatter , , , ( , ).
API / Java
Joda-Time API, . joda : " , Joda-Time " " . Java SE 8, java.time(JSR-310)..
( ) Joda-Time API, .
Java 8, API java.time. , , API.
Java 6 7, ThreeTen Backport, Java 8 . Android ThreeTenABP ( , ).
.
, ( Java 8 - java.time, ThreeTen Backport ( Android ThreeTenABP) - org.threeten.bp), .
API , , ( , Joda-Time):
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy", Locale.ENGLISH);
fmt.parse("2014");
fmt.parse("201400");
fmt.parse("201");
2014, 201400 201 ( 4 ) :
java.time.format.DateTimeParseException: '201400' 0
.
: , Joda-Time , - (, , 1, // ..).
, . , , , .
, Year :
DateTimeFormatter parser = DateTimeFormatter.ofPattern("yyyy", Locale.ENGLISH);
System.out.println(Year.parse("2014", parser));
System.out.println(Year.parse("201400", parser));
, int:
Year year = Year.parse("2014", parser);
int yearValue = year.getValue();
, - API . , DateTimeFormatterBuilder.
LocalDateTime, :
DateTimeFormatter fmt = new DateTimeFormatterBuilder()
.appendPattern("yyyy")
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.toFormatter(Locale.ENGLISH);
System.out.println(LocalDateTime.parse("2014", fmt));
System.out.println(LocalDateTime.parse("201400", fmt));
, , .