资讯专栏INFORMATION COLUMN

乐字节-Java8新特性之Date API

suemi / 1151人阅读

摘要:上一篇文章,小乐给大家带来了新特性之,接下来本文将会给大家介绍新特性之前言通过发布新的来进一步加强对日期与时间的处理。

上一篇文章,小乐给大家带来了Java8新特性之Optional,接下来本文将会给大家介绍Java8新特性之Date API

前言:

Java 8通过发布新的Date-Time API来进一步加强对日期与时间的处理。 旧版的 Java 中,日期时间 API 存在诸多问题 :

非线程安全 − java.util.Date 是非线程安全的,所有的日期类都是可变的,

设计很差 − Java的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义。

时区处理麻烦 − 日期类并不提供国际化,没有时区支持

Java 8 在 java.time 包下提供了很多新的 API。以下为两个比较重要的 API:

Local(本地) : 简化了日期时间的处理,没有时区的问题。

Zoned(时区) − 通过制定的时区处理日期时间。

新的java.time包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作。

1、LocalDateTime

LocalDateTime ldt = LocalDateTime.now();
// 获取系统当前时间
System.out.println(ldt);
LocalDateTime ldt2 = LocalDateTime.of(2019, 01, 01, 12, 12, 12, 888000000);
// 构建LocalDateTime对象ldt
System.out.println(ldt2);
// 获取明年此时的时间
LocalDateTime ldt3 = ldt.plusYears(1);
System.out.println(ldt3);
// 获取去年此刻时间
LocalDateTime ldt4 = ldt.minusYears(1);
System.out.println(ldt4);
// 获取年
System.out.println(ldt.getYear());
// 获取月份
System.out.println(ldt.getMonthValue());
// 获取本月第某天
System.out.println(ldt.getDayOfMonth());
// 获取时
System.out.println(ldt.getHour());
// 获取分
System.out.println(ldt.getMinute());
// 获取秒
System.out.println(ldt.getSecond());
// 获取纳秒
System.out.println(ldt.getNano());
2、时间戳
时间戳:以Unix元年:1970年1月1日 00:00:00 至目前时间之间的毫秒值 

public static void testInstant(){
    // 时间戳 Instant
    Instant ins1 = Instant.now();
    // 默认获取UTC时间,协调世界时
    System.out.println(ins1);
    OffsetDateTime odt = ins1.atOffset(ZoneOffset.ofHours(8));
    System.out.println(odt);
    System.out.println(ins1.toEpochMilli());
    Instant ins2 = Instant.ofEpochSecond(60);
    System.out.println(ins2);
}
3、日期时间间隔计算:Duration、Period
public static void testDuration(String[] args) {
        Instant ins1 = Instant.now();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Instant ins2 = Instant.now();
        Duration dura = Duration.between(ins1, ins2);
        System.out.println(dura.toMillis());
        System.out.println("----------------------");
        LocalTime lt1 = LocalTime.now();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        LocalTime lt2 = LocalTime.now();
        Duration dura2 = Duration.between(lt1, lt2);
        System.out.println(dura2.toMillis());
    }

    public  static void testPeriod(){
        LocalDate ld1 = LocalDate.of(2015, 2, 2);
        LocalDate ld2 = LocalDate.now();
        Period period = Period.between(ld1, ld2);
        System.out.println(period);
        System.out.println("相差" + period.getYears() + "年"
                + period.getMonths() + "月"
                + period.getDays() + "天");

    }
4、时间校正:TemporalAdjuster
public  static  void testTemporalAdjuster(){
    LocalDateTime ldt = LocalDateTime.now();
    System.out.println(ldt);
    LocalDateTime ldt2 = ldt.withDayOfMonth(10);
    System.out.println(ldt2);
    LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
    System.out.println(ldt3);
}
5、日期时间格式化
public  static  void testDateFormate(){
        DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
        LocalDateTime ldt = LocalDateTime.now();
        String strDate = ldt.format(dtf);
        System.out.println(strDate);
        System.out.println("----------------------------");
        DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
        String strDate2 = dtf2.format(ldt);
        System.out.println(strDate2);
        System.out.println("-----------------------------");
        LocalDateTime newDate = ldt.parse(strDate2, dtf2);
        System.out.println(newDate);
    }
6、TimeZone 时区处理
    // 时区的处理
    public  static  void testTimeZone(){
        LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Europe/Dublin"));
        System.out.println(ldt);
        LocalDateTime ldt2 = LocalDateTime.now(ZoneId.of("Europe/Dublin"));
        ZonedDateTime zdt = ldt2.atZone(ZoneId.of("Europe/Dublin"));
        System.out.println(zdt);
    }

这次就分享到这里了,后面小乐会继续给大家介绍Java8新特性的,请大家继续多多关注哦!乐字节只讲Java技术干货。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77601.html

相关文章

  • 字节-Java8特性Base64和重复注解与类型注解

    摘要:上一篇小乐给大家说了乐字节新特性之,接下来小乐继续给大家说一说新特性之和重复注解与类型注解。内部类与方法相关的内部类这是一个静态类。也是一个静态类。 上一篇小乐给大家说了《乐字节-Java8新特性之Date API》,接下来小乐继续给大家说一说Java8新特性之Base64和重复注解与类型注解。 一、Base64 在Java 8中,内置了Base64编解码相关的特性。Java 8中使用...

    1treeS 评论0 收藏0
  • 字节-Java8特性方法引用

    摘要:上一篇小乐介绍了新特性函数式接口,大家可以点击回顾。中引入方法引用新特性用于简化应用对象方法的调用,方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用是一种更简洁易懂的表达式。 上一篇小乐介绍了《Java8新特性-函数式接口》,大家可以点击回顾。这篇文章将接着介绍Java8新特性之方法引用。 Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引用是...

    Codeing_ls 评论0 收藏0
  • 字节-Java8特性-接口默认方法

    摘要:注意当多个父接口中存在相同的默认方法时,子类中以就近原则继承。定义静态默认方法这是版简易计算器接口默认方法使用定义接口并提供默认打印方法定义接口默认方法支持方法形参这是数值运算基本接口。。。 总概 JAVA8 已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本。其中包括语言、编译器、库、工具和JVM等诸多方面的新特性。 Java8 新特性列表如下:...

    arashicage 评论0 收藏0
  • 字节-Java8特性Stream流(下)

    摘要:归约操作计算有效订单总金额有效订单总金额收集数据收集将流转换为其他形式,方法作为终端操作,接收一个接口的实现,用于给中元素做汇总的方法。 接上一篇:《Java8新特性之stream》,下面继续接着讲Stream 5、流的中间操作 常见的流的中间操作,归为以下三大类:筛选和切片流操作、元素映射操作、元素排序操作:showImg(https://segmentfault.com/img/b...

    20171112 评论0 收藏0
  • 字节-Java8核心特性实战Stream(流)

    摘要:大家好,我是乐字节的小乐。需要注意的是很多流操作本身就会返回一个流,所以多个操作可以直接连接起来,如下图这样,操作可以进行链式调用,并且并行流还可以实现数据流并行处理操作。为集合创建并行流。 大家好,我是乐字节的小乐。说起流,我们会联想到手机、电脑组装流水线,物流仓库商品包装流水线等等,如果把手机 ,电脑,包裹看做最终结果的话,那么加工商品前的各种零部件就可以看做数据源,而中间一系列的...

    wenshi11019 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<