时间
前文讲述了时间点 Instant类。JDK8时间模型——Instant
现在分析 时间表 LocalDateTime 和 日期格式 DateTimeFormatter。
LocalDateTime 类似 之前的Calendar;DateTimeFormatter 和 之前的 SimpleDateFormatter 相似。
LocalDateTime
直接上代码:
// 当前日期
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime); // 2017-06-26T17:46:11.366
// 改变 年月日
int year=2017, month=6, dayOfMonth=25;
localDateTime = localDateTime.withYear(year);
localDateTime = localDateTime.withMonth(month);
localDateTime = localDateTime.withDayOfMonth(dayOfMonth);
System.out.println(localDateTime); // 2017-06-25T17:46:11.366
// 裁剪(用的有限制,日以上单位均无效)
localDateTime = localDateTime.truncatedTo(ChronoUnit.DAYS);
System.out.println(localDateTime); // 2017-06-25T00:00
localDateTime.truncatedTo(ChronoUnit.MONTHS); // error : UnsupportedTemporalTypeException: Unit is too large to be used for truncation
// String => LocalDateTime
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
localDateTime = LocalDateTime.parse("2017-06-01 01:02:03", dtf);
System.out.println(localDateTime); //2017-06-01T01:02:03
DateTimeFormatter
已提供的若干静态formatter:
// 默认提供 System.out.println(ISO_LOCAL_DATE.format(LocalDateTime.now())); // 2017-06-26 System.out.println(ISO_DATE.format(LocalDateTime.now())); // 2017-06-26 System.out.println(BASIC_ISO_DATE.format(LocalDateTime.now())); // 20170626
如果不够用,当然可以自定义DateTimeFormatter :
// 自定义 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println(dtf.format(LocalDateTime.now())); // 2017-06-26 17:37:57
改了原来的DateUtils吗?
并没有改原来的类,同时旧代码的调用保留。
替换需要更多的TeseCase,原来的类继续使用,新功能建议使用新DateUtils。
收获
新的Date API 熟悉并使用了它们写了新的DateUtils。