localdatetime转化为date_LocalDateTime用法(jdk1.8 )

前言

最近看别人项目源码,发现Java8新的日期时间API很方便强大,所以转载该入门介绍博客,记录一下。

使用新时间日期API的必要性

在java8以前,或许:

当你在做有关时间日期的操作时,你会想到用Date;

当你在做日期、月份、天数相加减时,你会想到用Calendar;

当你需要对时间日期进行格式化时,你会想到使用SimpleDateFormat或DateFormat下的其他子类;

……

但是,你必须知道,以上有关的时间日期操作对象,都是可变的、线程不安全的,同时,如果作为一个经常写过类似代码的人来说,尽管有相关对象提供某些操作,但并不能很快、很简单的就能得到最终想要的结果,如:要计算两个时间点之间相差的年、月、日、周、时、分、秒等,这些计算尽管原有API也能够实现,但原有API除了线程不安全之外,另外一个不足之处就是代码繁琐,性能低!

为何我们总提多线程下,线程不安全?对于初学者来说,可能觉得能够简单实现出功能就已经足够,但是真正的开发项目是不可能仅仅考虑功能的实现的,还要考虑项目的安全性、稳定性、高性能、高可用性等等!因此,作为java开发者,多线程的知识是必不可少的。而也正因为多线程,才会出现一大堆问题(简称线程安全性问题),作为开发者,就应该写出不仅能实现功能的代码,还要是线程安全的代码。那么,学习并熟悉掌握新的线程安全的API就显得非常重要了!

没错,java8出的新的时间日期API都是线程安全的,并且性能更好,代码更简洁!

新时间日期API常用、重要对象介绍

ZoneId: 时区ID,用来确定Instant和LocalDateTime互相转换的规则

Instant: 用来表示时间线上的一个点(瞬时)

LocalDate: 表示没有时区的日期, LocalDate是不可变并且线程安全的

LocalTime: 表示没有时区的时间, LocalTime是不可变并且线程安全的

LocalDateTime: 表示没有时区的日期时间, LocalDateTime是不可变并且线程安全的

Clock: 用于访问当前时刻、日期、时间,用到时区

Duration: 用秒和纳秒表示时间的数量(长短),用于计算两个日期的“时间”间隔

Period: 用于计算两个“日期”间隔

其中,LocalDate、LocalTime、LocalDateTime是新API里的基础对象,绝大多数操作都是围绕这几个对象来进行的,有必要搞清楚:

LocalDate : 只含年月日的日期对象

LocalTime :只含时分秒的时间对象

LocalDateTime : 同时含有年月日时分秒的日期对象

本文将以实例讲解日常开发中常用到的时间日期操作,如:

获取当前日期、时间

指定时间日期创建对应的对象

计算两个时间点的间隔

判断两个时间的前后

时间日期的格式化

获取时间戳

时间、日期相加减

获取给定时间点的年份、月份、周、星期等

……

新时间日期API详解与示例

获取当前时间

运行结果:

image.png

根据指定日期/时间创建对象

运行结果:

image.png

日期时间的加减

对于LocalDate,只有精度大于或等于日的加减,如年、月、日;

对于LocalTime,只有精度小于或等于时的加减,如时、分、秒、纳秒;

对于LocalDateTime,则可以进行任意精度的时间相加减;

运行结果:

image.png

将年、月、日等修改为指定的值,并返回新的日期(时间)对象

析: 其效果与时间日期相加减差不多,如今天是2018-01-13,要想变为2018-01-20有两种方式

a. localDate.plusDays(20L) -> 相加指定的天数

b. localDate.withDayOfYear(20) -> 直接指定到哪一天

运行结果:

image.png

获取日期的年月日周时分秒

运行结果:

image.png

时间日期前后的比较与判断

判断是否为闰年

java8时钟 : clock()

时间戳

事实上Instant就是java8以前的Date,

可以使用以下两个类中的方法在这两个类型之间进行转换,

比如Date.from(Instant)就是用来把Instant转换成java.util.date的,

而new Date().toInstant()就是将Date转换成Instant的

计算时间、日期间隔

Duration:用于计算两个“时间”间隔

Period:用于计算两个“日期”间隔

运行结果:

image.png

当计算程序的运行时间时,应当使用时间戳Instant

时间日期的格式化(格式化后返回的类型是String)

1. 使用jdk自身配置好的日期格式

运行结果:

image.png

2. 使用自定义格式

运行结果:

image.png

注:自定义转化的格式一定要与日期类型对应

LocalDate只能设置仅含年月日的格式

LocalTime只能设置仅含时分秒的格式

LocalDateTime可以设置含年月日时分秒的格式

代码如下:

运行结果:

image.png

将时间字符串形式转化为日期对象

运行结果:

image.png

注:格式的写法必须与字符串的形式一样

2018-01-13 21:27:30 对应 yyyy-MM-dd HH:mm:ss

20180113213328 对应 yyyyMMddHHmmss

否则会报运行时异常!

但要记住:得到的最终结果都是类似2018-01-13T21:27:30的格式

因为在输出LocalDateTime对象时,会调用其重写的toString方法。

将时间日期对象转为格式化后的时间日期对象

运行结果:

image.png

long毫秒值转换为日期

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值