java 日期间隔_Java8新特性之新世间与日期

接口中的默认方法与静态方法

Java 8中允许接口中包含具有具体实现的方法,该方法称为“默认方法”,默认方法使用 default 关键字修饰。

default String getName(){ return "呵呵呵";}

接口默认方法的”类优先”原则

若一个接口中定义了一个默认方法,而另外一个父类或接口又定义了一个同名的方法时。选择父类中的方法。如果一个父类提供了具体的实现,默认使用父类的方法

接口冲突。如果一个父接口提供一个默认方法,而另一个接口也提供了一个具有相同名称和参数列表的方法(不管方是否是默认方法),那么必须覆盖该方法来解决冲突(选择采取那个接口的方法实现)



新时间日期

使用 LocalDate、LocalTime、LocalDateTime

LocalDate、LocalTime、LocalDateTime 类的实例是不可变的对象(线程安全),分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。

48d1485daa43816e5180fbd57bdc3f22.png
bd36d1f8e3d9ebf6592eec7b407669d8.png

Instant 时间戳

用于“时间戳”的运算。它是以Unix元年(传统的设定为UTC时区1970年1月1日午夜时分)开始所经历的描述进行运算

Instant ins = Instant.now(); //默认使用 UTC 时区System.out.println(ins);//将时间偏移8小时OffsetDateTime odt = ins.atOffset(ZoneOffset.ofHours(8));System.out.println(odt);//将时间转为纳秒System.out.println(ins.getNano());//偏移5秒Instant ins2 = Instant.ofEpochSecond(5);System.out.println(ins2);

输出样式

01cb4653b190c5519bc2515dc7e5e626.png

Duration 和 Period

Duration:用于计算两个“时间”间隔

Instant ins1 = Instant.now();Instant ins2 = Instant.now();System.out.println("所耗费时间为:" + Duration.between(ins1, ins2));

Period:用于计算两个“日期”间隔

LocalDate ld1 = LocalDate.now();LocalDate ld2 = LocalDate.of(2011, 1, 1);Period pe = Period.between(ld2, ld1);

日期的操纵(时间校正器)

TemporalAdjuster (接口): 时间校正器。有时我们可能需要获取例如:将日期调整到“下个周日”等操作。

TemporalAdjusters : 该类通过静态方法提供了大量的常用 TemporalAdjuster 的实现

代码实例:

LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt); //将日期设为10 LocalDateTime ldt2 = ldt.withDayOfMonth(10); System.out.println(ldt2); //下一个周末 LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); System.out.println(ldt3);

解析与格式化

java.time.format.DateTimeFormatter 类

//使用系统的样式格式// DateTimeFormatter dtf = DateTimeFormatter.ISO_LOCAL_DATE; //自定义事件输出格式 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss E");  LocalDateTime ldt = LocalDateTime.now(); String strDate = ldt.format(dtf);  System.out.println(strDate); //将字符串转解析为时间 LocalDateTime newLdt = LocalDateTime.parse(strDate, dtf); System.out.println(newLdt);

时区的处理

Java8 中加入了对时区的支持,带时区的时间为分别为:

ZonedDate、ZonedTime、ZonedDateTime

其中每个时区都对应着 ID,地区ID都为 “{区域}/{城市}”的格式例如 :Asia/Shanghai 等

ZoneId:该类中包含了所有的时区信息 ; getAvailableZoneIds() : 可以获取所有时区时区信息 ; of(id) : 用指定的时区信息获取 ZoneId 对象

代码实例

//获取上海时区的时间LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));System.out.println(ldt);//返回带时区信息的时间ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("US/Pacific"));System.out.println(zdt);//获取所有的时区Set set = ZoneId.getAvailableZoneIds();

与传统日期处理的转换

69c173899f914a80b2c11321da73642d.png
2b963688db07e59a31684d04844f57fc.png


重复注解与类型注解

Java 8对注解处理提供了两点改进:可重复的注解及可用于类型的注解

947fb8d35dd82b7da2f9592384689438.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值