ICode9

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

Java8新特性-日期时间

2021-10-27 12:33:00  阅读:183  来源: 互联网

标签:10 java 特性 日期 2021 Date LocalDate Java8


1.背景

  Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理。

  在旧版的 Java 中,日期时间 API 存在诸多问题,其中有:

  非线程安全 − java.util.Date 是非线程安全的,所有的日期类都是可变的,这是Java日期类最大的问题之一。

  设计不规范 − Java的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义。java.util.Date同时包含日期和时间,而java.sql.Date仅包含日期,将其纳入java.sql包并不合理。另外这两个类都有相同的名字,这本身就是一个非常糟糕的设计。

  时区处理麻烦 − 日期类并不提供国际化,没有时区支持,因此Java引入了java.util.Calendar和java.util.TimeZone类,但他们同样存在上述所有的问题。

2.Java8中java.time包下的类

 

如上图所示,在java8中,java.time包下主要包含下面几个主要的类:

Instant:时间戳
Duration:持续时间,时间差
LocalDate:只包含日期,比如:2016-10-20
LocalTime:只包含时间,比如:23:12:10
LocalDateTime:包含日期和时间,比如:2016-10-20 23:14:21
Period:时间段
ZoneOffset:时区偏移量,比如:+8:00
ZonedDateTime:带时区的时间
Clock:时钟,比如获取目前美国纽约的时间
新的java.time包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作。
LocalTime 和 LocalDate的区别?
LocalTime表⽰时间,时分秒,LocalDate表⽰⽇期,年⽉⽇。
获取当前时间,在Java8中,使用如下方式获取当前时间:
LocalDate today = LocalDate.now();
int year = today.getYear();
int month = today.getMonthValue();
int day = today.getDayOfMonth();
System.out.printf("Year : %d Month : %d day : %d t %n", year,month, day);
创建指定日期的时间
LocalDate date = LocalDate.of(2021, 01, 01);
检查闰年,直接使⽤LocalDate的isLeapYear即可判断是否闰年
LocalDate nowDate = LocalDate.now();
//判断闰年
boolean leapYear = nowDate.isLeapYear();
计算两个⽇期之间的天数和⽉数
在Java 8中可以⽤java.time.Period类来做计算。
Period period = Period.between(LocalDate.of(2021, 1, 5),LocalDate.of(2021, 2, 5));

以及java.time.format包中的

 

DateTimeFormatter:时间格式化

时间格式化成指定格式的字符串:

LocalDateTime timeNow = LocalDateTime.now();
System.out.println("before formatter:" + timeNow);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
String afterFormat = dateTimeFormatter.format(timeNow);
System.out.println("after formatter:" + afterFormat);

输出:

  before formatter:2021-10-27T11:49:37.407
  after formatter:2021-10-27 11:49:37

字符串格式化成时间类型:

String timeFormat = "2021-10-27 11:49:37";
//HH表示24小时制,hh表示12小时制
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDate = LocalDateTime.parse(timeFormat, formatter);
System.out.println(localDate);

输出:
  2021-10-27T11:49:37

3.比较java.util.date

时间格式化成指定格式的字符串:

//1.将Date类型转化成对应格式的字符串,SimpleDateFormat始终都要创建的
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String oldDate = sdf.format(date);
System.out.println(oldDate);

输出:
  2021-10-27 11:57:31

将字符串转化成指定格式的时间:

//2.将字符串转化成指定格式的时间,SimpleDateFormat始终都要创建的
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date date = sdf.parse("2021-10-27 11:57:31");
            System.out.println(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }

输出:
Wed Oct 27 11:57:31 CST 2021

 

标签:10,java,特性,日期,2021,Date,LocalDate,Java8
来源: https://www.cnblogs.com/lu97/p/15470039.html

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

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

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

ICode9版权所有