ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java8---新的日期和时间API

2021-06-18 21:04:40  阅读:188  来源: 互联网

标签:21 time --- API LocalDateTime date LocalDate Java8 LocalTime


Java8以前时间和日期api存在的问题:

在Java 1.0 中,对日期和时间的支持只能依赖java.util.Date 类,这个类无法表示日期,只能以毫秒的精度表示时间。

比如:年份的起始选择是1900 年,月份的起始从0 开始。这意味着,如果你想要用Date 表示Java 9 的发布日期,即2017 年9 月21 日,

需要创建下面这样的Date 实例:

Date date = new Date(117, 8, 21);
它的打印输出效果为:
Thu Sep 21 00:00:00 CET 2017

在Java 1.1 中,Date 类中的很多方法被废弃了,取而代之的是java.util.Calendar 类,Calendar 类也有类似的问题和设计缺陷月份依旧是从0 开始计算

(不过,至少Calendar 类去掉了由1900 年开始计算年份这一设计)

有的特性只在某一个类中提供,比如用于以语言无关方式格式化和解析日期或时间的DateFormat 方法就只在Date 类里有。

使用LocalDate 和LocalTime

LocalDate 类的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息。另外,它也不附带任何与时区相关的信息。

LocalDate date = LocalDate.of(2017, 9, 21);//2017-09-21
int year = date.getYear();                           //2017
Month month = date.getMonth();                //SEPTEMBER 
int day = date.getDayOfMonth();                //21
DayOfWeek dow = date.getDayOfWeek();    //THURSDAY
int len = date.lengthOfMonth();                   //30
boolean leap = date.isLeapYear();                //false

  可以使用工厂方法now 从系统时钟中获取当前的日期:

LocalDate today = LocalDate.now();

  而LocalTime是一个不可变的对象,表示一个没有日期信息的时间。

LocalTime time = LocalTime.of(13, 45, 20);
int hour = time.getHour();
int minute = time.getMinute();
int second = time.getSecond();

  LocalDate 和LocalTime 都可以通过解析代表它们的字符串创建。使用静态方法parse:

LocalDate date = LocalDate.parse("2017-09-21");
LocalTime time = LocalTime.parse("13:45:20");

  一旦传递的字符串参数无法被解析为合法的LocalDate 或LocalTime 对象,这两个parse 方法都会抛出一个继承自RuntimeException 的DateTimeParseException 异常。

使用复合类LocalDateTime

LocalDateTime,是LocalDate 和LocalTime 的合体。它同时表示了日期和时间,但不带有时区信息,可以直接创建,也可以通过合并日期和时间对象创建

LocalDateTime dt1 = LocalDateTime.of(2014, Month.SEPTEMBER, 21, 13, 45, 20);
LocalDateTime dt2 = LocalDateTime.of(date, time);
LocalDateTime dt3 = date.atTime(13, 45, 20);
LocalDateTime dt4 = date.atTime(time);
LocalDateTime dt5 = time.atDate(date);

LocalDate date1 = dt1.toLocalDate();
LocalTime time1 = dt1.toLocalTime();

操纵、解析和格式化日期

withAttribute 方法会创建对象的一个副本,并按照需要修改它的属性,它们都不会修改原来的对象!

LocalDate date1 = LocalDate.of(2017, 9, 21);
LocalDate date2 = date1.withYear(2011);
LocalDate date3 = date2.withDayOfMonth(25);
LocalDate date4 = date3.with(ChronoField.MONTH_OF_YEAR, 2);

  

。。。。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

标签:21,time,---,API,LocalDateTime,date,LocalDate,Java8,LocalTime
来源: https://www.cnblogs.com/superkuan/p/14878714.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有