设为首页 加入收藏

TOP

Java 8新特性之新的日期和时间API(三)
2018-11-20 22:09:43 】 浏览:396
Tags:Java 特性 日期 时间 API
09-23


除了withAttribute详细的年月日,也可以采用通用的with方法,第一个参数是TemporalField对象,第二个参数是修改的值。它也可以操纵LocalDate对象:


        LocalDate dd5 = dd.plusWeeks(1); //加一周
        LocalDate dd6 = dd.minusYears(3); //减去三年
        LocalDate dd7 = dd.plus(6,ChronoUnit.MONTHS); //加6月


plus和minus方法和上面的with类似,他们都声明于Temporal接口中。像LocalDate、LocalTime、LocalDateTime以及Instant这些表示日期和时间的类提供了大量的通用方法:


1、from 静态方法 依据传入的Temporal对象创建是实例


2、now 静态方法 依据系统时钟创建Temporal对象


3、of 静态方法 由Temporal对象的某个部分创建对象的实例


4、 parse 静态方法  由字符串创建Temporal对象的实例


5、atOffset 将Temporal对象和某个时区偏移相结合


6、atZone 将Temporal 对象和某个时区相结合


7、format 使用某个指定的格式将Temporal对象转换为字符串(Instant类不提供此方法)


8、get 读取Temporal对象的某一部分的值


9、minus 创建对象的一个副本,然后将当前的Temporal对象的值减去一定的时长创建该副本


10、plus 创建对象的一个副本,然后将当前Temporal对象的值加上一定的时长创建该副本


11、with 以该对象为模板,对某些状态进行修改创建该对象的副本。


TemporalAdjuster


操纵更复杂的日期,比如将日期调整到下个周日、下个工作日,或者是本月的最后一天。这时可以使用with的重载版本,向其传递一个提供了更多定制化选择的TemporalAdjuster对象,更加灵活的处理日期。


 


import static java.time.temporal.TemporalAdjusters.*;


        LocalDate dd = LocalDate.of(2018,8,23);


        LocalDate dd1 = dd.with(dayOfWeekInMonth(2,DayOfWeek.FRIDAY)); //同一个月中,第二个星期五 2018-08-10


        LocalDate dd2 = dd.with(firstDayOfMonth()); //当月的第一天 2018-08-01
        LocalDate dd3 = dd.with(firstDayOfNextMonth()); //下月的第一天 2018-09-01
        LocalDate dd4 = dd.with(firstDayOfNextYear()); //明年的第一天 2019-01-01
        LocalDate dd5 = dd.with(firstDayOfYear()); //当年的第一天 2018-01-01
        LocalDate dd6 = dd.with(firstInMonth(DayOfWeek.MONDAY)); //当月第一个星期一 2018-08-06


        LocalDate dd7 = dd.with(lastDayOfMonth()); //当月的最后一天 2018-08-31
        LocalDate dd8 = dd.with(lastDayOfYear()); //当年的最后一天 2018-12-31
        LocalDate dd9 = dd.with(lastInMonth(DayOfWeek.SUNDAY)); //当月最后一个星期日 2018-08-26


        LocalDate dd10 = dd.with(previous(DayOfWeek.MONDAY)); //将日期向前调整到第一个符合星期一 2018-08-20
        LocalDate dd11 = dd.with(next(DayOfWeek.MONDAY)); //将日期向后调整到第一个符合星期一 2018-08-27


        LocalDate dd12 = dd.with(previousOrSame(DayOfWeek.FRIDAY)); //将日期向前调整第一个符合星期五,如果该日期已经符合,直接返回该对象 2018-08-17
        LocalDate dd13 = dd.with(nextOrSame(DayOfWeek.FRIDAY)); //将日期向后调整第一个符合星期五,如果该日期已经符合,直接返回该对象 2018-08-24


TemporalAdjuster可以进行复杂的日期操作,如果没有找到符合的预定义方法,可以自己创建一个,TemporalAdjuster接口只声明了一个方法所以他说一个函数式接口:


@FunctionalInterface
public interface TemporalAdjuster {
    Temporal adjustInto(Temporal temporal);
}


这意味着TemporalAdjuster接口的实现需要定义如何将一个Temporal对象转换为另一个Temporal对象。比如设计一个NextWorkingDay类,实现计算下一个工作日,过滤掉周六和周日节假日。


public class NextWorkingDay implements TemporalAdjuster {
    @Override
    public Temporal adjustInto(Temporal temporal) {
        DayOfWeek dow = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));
        int dayToAdd = 1;
        //如果当前日期 星期一到星期五之间返回下一天
        if(dow == DayOfWeek.FRIDAY) dayToAdd = 3;
        //如果当前日期 周六或周日 返回下周一
        else if(dow == DayOfWeek.SATUR

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java 8新特性之CompletableFuture.. 下一篇Java 8新特性之Optional取代null

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目