ZHDateTimeParser { public static Optional<PartialDateTime> parse(String text ) { Matcher matcher = PATTERN.matcher( text ); if ( matcher.find() ) { List<Integer> values = Matchers.groups( matcher ) .map( OptionalInts::parse ) .filter( OptionalInt::isPresent ) .map( OptionalInt::getAsInt ) .collect( Collectors.toList() ); if ( values.size() != 5 ) { return Optional.empty(); } LocalDateTime localDateTime = LocalDateTime.of( values.get( 0 ), values.get( 1 ), values.get( 2 ), values.get( 3 ), values.get( 4 ) ); return Optional.of( localDateTime ) .map( LocalDateTimePartialDateTimeDecorator::new ); } return Optional.empty(); }  static Optional<PartialDateTime> parse(String text );  }
@Test public void testParse() throws Exception { ZHDateTimeParser zhDateTimeParser = new ZHDateTimeParser(); assertEquals( "2016-03-04T07:34", zhDateTimeParser.parse( "2016年03月04日 07:34" ).get().toString() ); assertEquals( "2016-03-05T17:59", zhDateTimeParser.parse( "2016年03月05日 17:59" ).get().toString() ); assertEquals( "2016-03-03T09:09", zhDateTimeParser.parse( "2016年03月03日09:09" ).get().toString() ); }