DAY) dayToAdd = 2;
return temporal.plus(dayToAdd, ChronoUnit.DAYS);
}
}
由于TemporalAdjuster是函数式接口,所以你只能以Lambda表达式的方式向Adjuster接口传递行为:
date.with(t->{
//上面一坨
})
为了可以重用,TemporalAdjuster对象推荐使用TemporalAdjusters类的静态工厂方法ofDateAdjuster:
LocalDate dd = LocalDate.of(2018, 8, 23);
TemporalAdjuster nextWorkingDay = TemporalAdjusters.ofDateAdjuster(
temporal -> {
DayOfWeek dow = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));
int dayToAdd = 1;
//如果当前日期 星期一到星期五之间返回下一天
if (dow == DayOfWeek.FRIDAY) dayToAdd = 3;
//如果当前日期 周六或周日 返回下周一
else if (dow == DayOfWeek.SATURDAY) dayToAdd = 2;
return temporal.plus(dayToAdd, ChronoUnit.DAYS);
}
);
LocalDate next = dd.with(nextWorkingDay);
打印输出及解析日期
处理日期和时间对象时,格式化以及解析日期-时间对象是另一个非常重要的功能。新的java.time.format包就是为了这个目的而设计的。这个包中最重要的类是DateTimeFormatter,创建格式器最简单的方式是通过他的静态工厂方法及常量。
String s1 = next.format(DateTimeFormatter.BASIC_ISO_DATE); //20180824
String s2 = next.format(DateTimeFormatter.ISO_LOCAL_DATE); //2018-08-24
除了解析为字符串外,还可以通过解析代表日期或时间的字符串重新创建该日期对象。
LocalDate date1 = LocalDate.parse("20180901",DateTimeFormatter.BASIC_ISO_DATE);
LocalDate date2 = LocalDate.parse("2018-09-02",DateTimeFormatter.ISO_LOCAL_DATE);
与老的java.util.DateFormat想比较,所有的DateTimeFormatter实例都是线程安全的。DateTimeFormatter类还支持一个静态工厂方法,它按照某个特定的模式创建格式器。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate now = LocalDate.now();
String formatterDate = now.format(formatter);
LocalDate nowparse = LocalDate.parse(formatterDate,formatter);
ofPattern可以按照指定的格式进行解析成字符串,然后又调用了parse方法的重载 将该格式的字符串转换成了 LocalDate对象。
ofPattern也提供了重载版本,使用它可以创建某个Locale的格式器:
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy年MMMMd号", Locale.CHINA);
LocalDate chinaDate = LocalDate.parse("2018-08-21");
String formatterDate2 = chinaDate.format(formatter2); //2018年八月21号
LocalDate chinaDate2 = LocalDate.parse(formatterDate2,formatter2);
DateFormatterBuilder类还提供了更复杂的格式器和更强大的解析功能:
DateTimeFormatter chinaFormatter = new DateTimeFormatterBuilder().appendText(ChronoField.YEAR)
.appendLiteral("年")
&nbs