美文网首页
Java8 中处理时间和日期详解

Java8 中处理时间和日期详解

作者: hadoop_a9bb | 来源:发表于2019-04-29 20:16 被阅读0次

在Java8 以前日期和时间处理很难用,首先是java.util和java.sql中都有Date类,如果要进行格式化,还需要java.text.DateFormat类,同时java.util.Date中既包含了日期又包含了时间,所以Java8中新的日期和时间库解决了以前的很多弊端,并且也借鉴了第三方库joda很多的优点。

在Java8中,java.time包下主要包含了下面几个主要的类:

描述
Instant 时间戳
Duration 持续时间,时间差
LocalDate 只包含日期,比如:2019-04-29
LocalTime 只包含时间,比如:23:00:01
LocalDateTime 包含时间和日期,比如:2019-04-25 23:20:20
Period 时间段
ZoneOffset 时区偏移量 比如 +8:00
ZoneDateTime 带时区的时间
Clock 时钟,比如获取目前美国的纽约的时间
MonthDay 包含月日
YearMonth 包含年月

以及java.time.format包中的

描述
DateTimeFormatter 时间格式化
1.获取今天的日期
      /*获取今天的日期*/
        LocalDate todayDate = LocalDate.now();
        System.out.println("今天的日期:"+todayDate);
2.指定日期,进行相应操作
        /*2019-04月的第一天*/
        LocalDate firstDay = todayDate.with(TemporalAdjusters.firstDayOfMonth());
        System.out.println("本月第一天日期:"+firstDay);

        /*2019-04月的第一天 另一种方式*/
        LocalDate firstDayOther = todayDate.withDayOfMonth(1);
        System.out.println("本月第一天日期:"+firstDayOther);

        /*取本月的最后一天 大月、小月、平年、闰年的问题都不用考虑*/
        LocalDate lastDay = todayDate.with(TemporalAdjusters.lastDayOfMonth());
        System.out.println("本月最后一天日期:"+lastDay);

        /*当前日期+1天*/
        LocalDate tomorrow = todayDate.plusDays(1);
        System.out.println("明天日期:"+tomorrow);

        /*判断是否为闰年*/
        boolean isLeapYear = tomorrow.isLeapYear();
        System.out.println("是闰年吗:"+isLeapYear);
3.生日检查或者账单日检查
LocalDate birthday = LocalDate.of(1988,7,5);
MonthDay birthdayMd = MonthDay.of(birthday.getMonth(),birthday.getDayOfMonth());
MonthDay toDay = MonthDay.from(todayDate);
System.out.println("今天是生日吗:"+toDay.equals(birthdayMd));
4.获取当前的时间

时间主要使用LocalTime ,该类不包含日期,只有时间

/*获取当前时间*/
LocalTime now = LocalTime.now();
System.out.println("当前时间为:"+now);

/*如果不想显示毫秒*/
now = now.withNano(0);
System.out.println("当前时间为:"+now);

 /*指定时间*/
LocalTime middleToday = LocalTime.of(12,0,1);
LocalTime nineClock = LocalTime.parse("00:00:00");
System.out.println("中午时间是:"+middleToday.format(DateTimeFormatter.ISO_TIME));
System.out.println("上午时间是:"+nineClock.format(DateTimeFormatter.ISO_TIME));

/*时间增减*/
LocalTime nowTimePlusTenHour =now.plusHours(10);
LocalTime nowTimePlus2Hour = now.plus(2, ChronoUnit.HOURS);
System.out.println("10小时后时间是:"+nowTimePlusTenHour.format(DateTimeFormatter.ISO_TIME));
System.out.println("2小时后时间是:"+nowTimePlus2Hour.format(DateTimeFormatter.ISO_TIME));

 /*时间比较*/
System.out.println("10小时之后时间比2小时之后时间大吗:"+nowTimePlusTenHour.isAfter(nowTimePlus2Hour));
System.out.println("10小时之后时间比2小时之后时间小吗:"+nowTimePlusTenHour.isBefore(nowTimePlus2Hour));
5.处理不同时区的时间
/*查看当前时区*/
ZoneId defaultZone = ZoneId.systemDefault();
System.out.println("当前时区为:"+defaultZone);

/*查看美国纽约当前时间*/
ZoneId america = ZoneId.of("America/New_York");
System.out.println("上海当前时间为:"+LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println("美国当前时间为"+LocalDateTime.now(america).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));

/*带有时区的时间*/
ZonedDateTime americaZonedDateTime = ZonedDateTime.now(america);
System.out.println("美国的时区时间为:"+americaZonedDateTime);
6.比较两个时间差
/*日期比较*/
LocalDate lastYearDate = firstDay.plusYears(-1);
Period period = Period.between(lastYearDate,todayDate);
System.out.println("相差的天数为:"+period.getDays());
System.out.println("相差的月数为:"+period.getMonths());
System.out.println("相差的年数为:"+period.getYears());
System.out.println("相差的总天数为:"+lastYearDate.until(todayDate,ChronoUnit.DAYS));
System.out.println("相差的总月数为:"+lastYearDate.until(todayDate,ChronoUnit.MONTHS));
System.out.println("相差的总年数为:"+lastYearDate.until(todayDate,ChronoUnit.YEARS));
/*----------------------------------------------------------------*/
/*时间比较*/
Duration duration = Duration.between(nowTimePlusTenHour,nowTimePlus2Hour);
System.out.println("相差的天数:"+duration.toDays());
System.out.println("相差的小时数:"+duration.toHours());
System.out.println("相差的分钟数:"+duration.toMinutes());
System.out.println("相差毫秒数:"+duration.toMillis());
System.out.println("相差的纳秒数:"+duration.toNanos());

/*----------------------------------------------------------------*/
/*带日期的时间比较*/
duration = Duration.between(LocalDateTime.now(america),LocalDateTime.now());
System.out.println("相差的天数:"+duration.toDays());
System.out.println("相差的小时数:"+duration.toHours());
System.out.println("相差的分钟数:"+duration.toMinutes());
System.out.println("相差毫秒数:"+duration.toMillis());
System.out.println("相差的纳秒数:"+duration.toNanos());
7.java8 时间类与Date类相互转化
 /*Date转为LocalDateTime*/
LocalDateTime localDateTime2 = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
System.out.println(localDateTime2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));

/*LocalDateTime转Date*/
Instant instant4 = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant();
Date date3 = Date.from(instant4);

/*LocalDate转Date*/
/*因为LocalDate不包含时间,所以转Date时,会默认转为当天的起始时间,00:00:00*/
Instant instant5 = LocalDate.now().atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
Date date4 = Date.from(instant);

总结:总之java8 中的时间比之前的好用很多,java8将时间、日期、时区分开,并加入了MonthDay

相关文章

  • Java8 中处理时间和日期详解

    在Java8 以前日期和时间处理很难用,首先是java.util和java.sql中都有Date类,如果要进行格式...

  • Java8新特性9--新的日期和时间API

    新的日期时间处理API 从Java8开始,原生的Java API中已经能提供高质量的日期和时间支持,java.ti...

  • Date、LocalDate、LocalTime、LocalDa

    java8全新的日期和时间API LocalDate、LocalTime、LocalDateTime是java8对...

  • Pandas中时间和日期处理

    1、生成一个时间段 1、生成一个时间区间段,间隔为小时 2、生成一个Series,并制定索引为时间段 3、改变时间...

  • Pandas中时间和日期处理

    1、生成一个时间段 2、转华为日期格式 2.1 数字生成日期格式 2.2 字符生成日期格式 2.3 只有年月 2....

  • java8处理日期和时间

    自省:java8用了好久了,虽然一直知道有新的时间API,但是一直用java.util.Date用习惯了,也没有特...

  • Java8中的时间和日期

    参考文章:Java中的时间和日期(下)stackoverflow 今天在上面的博客中学到了java8的LocalD...

  • Java8中的时间和日期

    Date Java8之前java.util 包提供了 Date 类来封装当前的日期和时间,Date 类提供两个构造...

  • java8-新的日期API

    背景 java的日期和时间API设计不理想,java8引入新的时间和日期API就是为了解决这个问题。 java8引...

  • 日期处理和时间处理

    日期和时间处理函数 此SELECT语句正常运行。它检索出一个订单记录,该订单记录的order_date为2005-...

网友评论

      本文标题:Java8 中处理时间和日期详解

      本文链接:https://www.haomeiwen.com/subject/zrvsbqtx.html