[java8新特性]
DateTimeFormatter : 解析和格式化日期或时间
LocalDateTime localDateTime = LocalDateTime.now();
ZonedDateTime zonedDateTime = ZonedDateTime.parse("2019-01-26T10:15:30+01:00[Europe/Paris]");
System.out.println(DateTimeFormatter.BASIC_ISO_DATE.format(zonedDateTime)); // 20190126+0100
System.out.println(DateTimeFormatter.ISO_LOCAL_DATE.format(zonedDateTime)); // 2019-01-26
System.out.println(DateTimeFormatter.ISO_OFFSET_DATE.format(zonedDateTime)); // 2019-01-26+01:00
System.out.println(DateTimeFormatter.ISO_DATE.format(zonedDateTime)); // 2019-01-26+01:00
System.out.println(DateTimeFormatter.ISO_LOCAL_TIME.format(zonedDateTime)); // 10:15:30
System.out.println(DateTimeFormatter.ISO_OFFSET_TIME.format(zonedDateTime)); // 10:15:30+01:00
System.out.println(DateTimeFormatter.ISO_TIME.format(zonedDateTime)); // 10:15:30
System.out.println(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(zonedDateTime)); // 2019-01-26T10:15:30
System.out.println(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(zonedDateTime)); // 2019-01-26T10:15:30+01:00
System.out.println(DateTimeFormatter.ISO_ZONED_DATE_TIME.format(zonedDateTime)); // 2019-01-26T10:15:30+01:00[Europe/Paris]
System.out.println(DateTimeFormatter.ISO_DATE_TIME.format(zonedDateTime)); // 2019-01-26T10:15:30+01:00[Europe/Paris]
System.out.println(DateTimeFormatter.ISO_ORDINAL_DATE.format(zonedDateTime)); // 2019-026+01:00
System.out.println(DateTimeFormatter.ISO_WEEK_DATE.format(zonedDateTime)); // 2019-W04-6+01:00
System.out.println(DateTimeFormatter.ISO_INSTANT.format(zonedDateTime)); // 2019-01-26T09:15:30Z
System.out.println(DateTimeFormatter.RFC_1123_DATE_TIME.format(zonedDateTime)); // Sat, 26 Jan 2019 10:15:30 +0100
System.out.println(DateTimeFormatter.ofLocalizedTime(FormatStyle.FULL).format(zonedDateTime)); // 上午10时15分30秒 CET
System.out.println(DateTimeFormatter.ofLocalizedTime(FormatStyle.LONG).format(zonedDateTime)); // 上午10时15分30秒
System.out.println(DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM).format(zonedDateTime)); // 10:15:30
System.out.println(DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT).format(zonedDateTime)); // 上午10:15
System.out.println(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).format(zonedDateTime)); // 2019年1月26日 星期六
System.out.println(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG).format(zonedDateTime)); // 2019年1月26日
System.out.println(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).format(zonedDateTime)); // 2019-1-26
System.out.println(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).format(zonedDateTime)); // 19-1-26
System.out.println(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL).format(zonedDateTime)); // 2019年1月26日 星期六 上午10时15分30秒 CET
System.out.println(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG).format(zonedDateTime)); // 2019年1月26日 上午10时15分30秒
System.out.println(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).format(zonedDateTime)); // 2019-1-26 10:15:30
System.out.println(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT).format(zonedDateTime)); // 19-1-26 上午10:15
System.out.println(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.MEDIUM).format(zonedDateTime)); // 2019年1月26日 星期六 10:15:30
TemporalAccessor parsed = DateTimeFormatter.ISO_LOCAL_DATE_TIME.parse("2019-01-26T10:15:30");
LocalTime time = parsed.query(LocalTime::from);
Period extraDays = parsed.query(DateTimeFormatter.parsedExcessDays());
System.out.println(time); // 10:15:30
System.out.println(extraDays); // P0D
Boolean query = parsed.query(DateTimeFormatter.parsedLeapSecond());
System.out.println(query); // false
// 自定义格式化格式
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format1 = dateTimeFormatter.format(zonedDateTime);
String format2 = dateTimeFormatter.format(localDateTime);
System.out.println(format1); // 2019-01-26 10:15:30
System.out.println(format2); // 2019-01-26 13:41:56
// Locale语言环境
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(localDateTime)); // 2019-01-26 13:49:33
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.KOREAN).format(localDateTime));// 2019-01-26 13:49:33
// 得到{},ISO resolved to 2019-01-26T10:15:30对象
TemporalAccessor temporalAccessor = dateTimeFormatter.parse(format1);
int year = temporalAccessor.get(ChronoField.YEAR);
int hour = temporalAccessor.get(ChronoField.CLOCK_HOUR_OF_DAY);
System.out.println(temporalAccessor);
System.out.println(year); // 2019
System.out.println(hour); // 10
// 另一种格式化和解析
String format3 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println(format3); // 2019-01-26 14:14:01
LocalDateTime parse = LocalDateTime.parse("2019-01-26T10:15:30");// 日期字符串转为日期
System.out.println(parse); // 2019-01-26T10:15:30
String format4 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss E"));
LocalDateTime parse2 = LocalDateTime.parse(format4,DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss E"));
System.out.println(parse2); // 2019-01-26T14:25:30
其它特性或API,可查阅JDK1.8API或参考本人其它文章,另本人有中文版JDK1.8API可以参考我的分享文章