新的日期/时间API中,全部的类都是不可变的,这对多线程环境有好处。html
好比:LocalDateTimejava
新的API将人可读的日期时间和机器时间(unix timestamp)明确分离,它为日期(Date)、时间(Time)、日期时间(DateTime)、时间戳(unix timestamp)以及时区定义了不一样的类。api
不一样时间分解成了各个类,好比:LocalDate, LocalTime, LocalDateTime, Instant,Year,Month,YearMonth,MonthDay,DayOfWeek等,知足各类不一样场景使用需求。安全
在全部的类中,方法都被明肯定义用以完成相同的行为。多线程
举个例子,要拿到当前实例咱们可使用now()方法,在全部的类中都定义了format()和parse()方法,而不是像之前那样专门有一个独立的类。方法明确,清晰,统一,方便好记。函数
(至关于不少工具方法,再也不须要咱们本身封装了):全部新的日期/时间API类都实现了一系列方法用以完成通用的任务,如:加、减、格式化、解析、从日期/时间中提取单独部分,等等。工具
好比:LocalDateTime,包含很是丰富的实用操做(转换,获取各个字段,修改字段,增长和减小等)。spa
再也不局限于一次只能改变它的 一个值,而且你还可按照需求定义本身的日期转换器。好比:将日期调整到下个周日、下个工做日,或者是本月的最后一天。.net
lastDayOfMonth 建立一个新的日期,它的值为当月的最后一天。线程
(1)new Date(2019,01,01)
实际是3919年2月。由于Date的构造函数 的年份表示的始于1900年的差值。
LocalDate建立实例:
LocalDate localDate = LocalDate.of(2019, 1, 1);
(2)month是从0开始的。
LocalDate month是从1开始的:
LocalDate localDate = LocalDate.of(2019, 1, 1);
System.out.println(localDate.getMonthValue());
输出是1
(3)DAY_OF_WEEK 的取值,是从周日(1)开始的。
LocalDate week是从周一(1)开始的:
LocalDate localDate = LocalDate.of(2019, 1, 1);
System.out.println(localDate.getDayOfWeek());
System.out.println(localDate.getDayOfWeek().getValue());
输出
TUESDAY
2
(4)Date若是不格式化,打印出的日期可读性差。
LocalDate的输出,清晰。
LocalDate localDate = LocalDate.of(2019, 1, 1);
System.out.println(localDate.getMonthValue());
System.out.println(localDate.toString());
输出:
2019-01-01
(5)日期类并不提供国际化,没有时区支持
java8的时间类都支持了时区操做。
例如:LocalDateTime
//中国时间,输出时不包含时区 LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai")); System.out.println(ldt); //意大利罗马时间,输出时包含时区 ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Europe/Rome")); System.out.println(zdt);
输出
2019-12-20T23:17:07.914 2019-12-20T16:17:07.915+01:00[Europe/Rome]
(1)Date、Calendar可变性,线程安全问题
java8中全部类都是final修饰的,每次修改都会生成新的副本。
(2)DateFormat和SimpleDateFormat线程安全问题
java8中的DateTimeFormatter也是不可变的,源码:
好比,增长一天。
LocalDate localDate = LocalDate.of(2019, 1, 1); LocalDate localDate2 = localDate.plusDays(1); System.out.println("localDate:"+localDate); System.out.println("localDate2:"+localDate2);
输出:
localDate:2019-01-01
localDate2:2019-01-02
参考:https://blog.csdn.net/wangsun300/article/details/103403490