Java中的日期与时间

目录

一、日期与时间

1、Date

1)、Date 类概述

2)、Date的构造器

3)、Date的常用方法

4)、案例

5)、时间毫秒值 -> 日期对象

2、SimpleDateFormat

1)、概念

2)、构造器

3)、格式化方法

4)、格式化的时间形式的常用的模式

5)、将字符串时间转化为日期对象。

6)、SimpleDateFormat解析字符串时间成为日期对象

7)、案例

3、Calendar

1)、Calendar概述

2)、Calendar日历类创建日历对象的方法

3)、Calendar常用方法

二、JDK8新增日期类

1、概述、LocalTime /LocalDate / LocalDateTime

1)、概述

2)、LocalDate、LocalTime、LocalDateTime

3)、构建对象的方式

4)、LocalDate、LocalTime、LocalDateTime获取信息的API。

5)、转换相关的API

6)、修改相关的API

2、Instant

1)、概念

2)、用法

3)、注意

3、DateTimeFormatter

1)、概念

2)、用法

4、Duration

1)、概念

2)、用法

​编辑

5、Period

1)、概念

2)、用法

6、ChronoUnit 

1)、概念

2)、用法


一、日期与时间

1、Date

1)、Date 类概述

Date类代表当前所在系统的日期时间信息。

2)、Date的构造器

名称

说明

public Date()

创建一个Date对象,代表的是系统当前此刻日期时间。

3)、Date的常用方法

名称

说明

public long getTime()

返回从1970年1月1日    00:00:00走到此刻的总的毫秒数

4)、案例

4.1、需求

有一个时间2021年08月06日 11时11分11秒 往后2天14小时49分 06秒后的时间是多少?

4.1、代码

public static void main(String[] args) throws ParseException {
        //1、把字符串时间拿到程序中去
        String s = "2021年08月06日 11时11分11秒";

        //2、把字符串时间解析成时期对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        Date d = sdf.parse(s);

        //3、往后走2天14小时49分06秒
        long time = d.getTime() + (2L*24*60*60 + 14*60*60 + 49*60 + 6)*1000;

        //4、格式化这个时间毫秒值就是结果
        System.out.println(sdf.format(time));
    }

4.2、结果

5)、时间毫秒值 -> 日期对象

构造器:

构造器

说明

public Date(long time)

把时间毫秒值转换成Date日期对象。

方法: 

Date方法

说明

public void setTime(long time)

设置日期对象的时间为当前时间毫秒值对应的时间

2、SimpleDateFormat

1)、概念

代表简单日期格式化,可以用来把日期时间格式化成为我们想要的形式

2)、构造器

构造器

说明

public SimpleDateFormat​(String pattern)

创建简单日期格式化对象,并封装格式化的形式信息

3)、格式化方法

格式化方法

说明

public final String format(Date date)

将日期格式化成日期/时间字符串

public final String format(Object time)

将时间毫秒值式化成日期/时间字符串

4)、格式化的时间形式的常用的模式

 

5)、将字符串时间转化为日期对象。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");

6)、SimpleDateFormat解析字符串时间成为日期对象

解析方法

说明

 public Date parse​(String source)

  从给定字符串的开始解析文本以生成日期

7)、案例

7.1、需求

某购物网站举办秒杀活动,开始时间和结束时间如上图所示,当前活动结束后,系统记录到2位用户的付款时间分别如下:

小贾下单并付款的时间为:2020年11月11日 0:03:47

小皮下单并付款的时间为:2020年11月11日 0:10:11

规则:顾客的付款时间必须在秒杀时间之内,请判断出两位顾客是否秒杀成功。

7.2、分析

把4个字符串形式的时间解析成日期对象。

判断小贾和小皮的时间是否在秒杀时间范围之内,并给出相应的提示。

7.3、代码

public static void main(String[] args) throws ParseException {
        //1、开始和结束的时间
        String startTime = "2021-11-11 00:00:00";
        String endTime = "2021-11-11 00:10:00";

        //2、小皮和小贾的下单时间
        String xiaoPi = "2021-11-11 00:03:47";
        String xiaoJia = "2021-11-11 00:10:11";

        //3、解析他们的时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d1 = sdf.parse(startTime);
        Date d2 = sdf.parse(endTime);
        Date d3 = sdf.parse(xiaoPi);
        Date d4 = sdf.parse(xiaoJia);

        //判断他们是否下单成功
        if(d3.after(d1) && d3.before(d2)){
            System.out.println("小皮下单成功,正在发货!");
        }else {
            System.out.println("小皮没有下单成功!");
        }
        if(d4.after(d1) && d4.before(d2)){
            System.out.println("小贾下单成功,正在发货!");
        }else {
            System.out.println("小贾没有下单成功!");
        }

    }

7.4、结果

3、Calendar

1)、Calendar概述

Calendar代表了系统此刻日期对应的日历对象。

Calendar是一个抽象类,不能直接创建对象。

2)、Calendar日历类创建日历对象的方法

方法名

说明

public static Calendar getInstance()

获取当前日历对象

3)、Calendar常用方法

方法名

说明

public int get(int field)

取日期中的某个字段信息。

public void set(int field,int value)

修改日历的某个字段信息。

public void add(int field,int amount)

为某个字段增加/减少指定的值

public final Date getTime()

拿到此刻日期对象。

public long getTimeInMillis()

拿到此刻时间毫秒值

 注意:calendar是可变日期对象,一旦修改后其对象本身表示的时间将产生变化。

二、JDK8新增日期类

1、概述、LocalTime /LocalDate / LocalDateTime

1)、概述

从Java 8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:

 新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便。

其次,新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改。

2)、LocalDate、LocalTime、LocalDateTime

他们分别表示日期,时间,日期时间对象,他们的类的实例是不可变的对象。

他们三者构建对象和API都是通用的。

3)、构建对象的方式

方法名

说明

      public static Xxxx now();

静态方法,根据当前时间创建对象

LocaDate localDate = LocalDate.now();

LocalTime llocalTime = LocalTime.now();

LocalDateTime localDateTime = LocalDateTime.now();

public static Xxxx of(…);

静态方法,指定日期/时间创建对象

LocalDate localDate1 = LocalDate.of(2099 , 11,11);

LocalTime localTime1 = LocalTime.of(11, 11, 11);

LocalDateTime localDateTime1 = LocalDateTime.of(2020, 10, 6, 13, 23, 43);

4)、LocalDate、LocalTime、LocalDateTime获取信息的API。

方法名

说明

public int geYear()

获取年

public int getMonthValue()

获取月份(1-12)

Public int getDayOfMonth()

获取月中第几天乘法

Public int getDayOfYear()

获取年中第几天

Public DayOfWeek getDayOfWeek()

获取星期

5)、转换相关的API

方法名

说明

public LocalDate toLocalDate()

转换成一个LocalDate对象

public LocalTime toLocalTime()

转换成一个LocalTime对象

6)、修改相关的API

LocalDateTime 综合了 LocalDate 和 LocalTime 里面的方法,所以下面只用 LocalDate 和 LocalTime 来举例。

这些方法返回的是一个新的实例引用,因为LocalDateTime 、LocalDate 、LocalTime 都是不可变的。

方法名

说明

plusDays, plusWeeks, plusMonths, plusYears

向当前 LocalDate 对象添加几天、 几周、几个月、几年

minusDays, minusWeeks, minusMonths, minusYears 

从当前 LocalDate 对象减去几天、 几周、几个月、几年 

withDayOfMonth, withDayOfYear, withMonth, withYear 

将月份天数、年份天数、月份、年 份 修 改 为 指 定 的 值 并 返 回 新 的 LocalDate 对象 

isBefore, isAfter 

比较两个 LocalDate 

2、Instant

1)、概念

JDK8获取时间戳特别简单,且功能更丰富。Instant类由一个静态的工厂方法now()可以返回当前时间戳。

2)、用法

3)、注意

时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是类似JDK8 以前的Date。

Instant和Date这两个类可以进行转换。

3、DateTimeFormatter

1)、概念

在JDK8中,引入了一个全新的日期与时间格式器DateTimeFormatter。

正反都能调用format方法。

2)、用法

4、Duration

1)、概念

在Java8中,我们可以使用以下类来计算日期间隔差异:java.time.Period

主要是 Period 类方法 getYears(),getMonths() 和 getDays() 来计算,只能精确到年月日。

用于 LocalDate 之间的比较。

2)、用法

5、Period

1)、概念

在Java8中,我们可以使用以下类来计算时间间隔差异:java.time.Duration

提供了使用基于时间的值测量时间量的方法。

用于 LocalDateTime 之间的比较。也可用于 Instant 之间的比较。

2)、用法

6、ChronoUnit 

1)、概念

ChronoUnit类可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位。

2)、用法

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁༺๑小王不是程序员๑༻꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值