LocalDateTime - Java处理日期和时间

java.time包提供了新的日期和时间的API,新的API主要包括:

1. LocalDate/LocalTime/LocalDateTime

2. ZoneDateTime/ZoneId

3. Instant

4. Formatter


我们看java.time提供的

1. LocalDate: 本地的日期

2. LocalTime: 本地的时间

3. LocalDateTime: 本地的日+时间


java.time提供的新的API主要是有这几个特点:

1. 首先严格的区分日期和时间

2. 其次所有的类称为不变类,这一点和String非常的类似

3. 新的API的Month是从1到12,对应的是1月到12月,

4. Week的范围是从1到7,对应的是周一到周日,这样我们就不需要考虑加1和减1的问题了


我们可以通过LocalDate.now()获取当前的日期,通过LocalTime.now()获取当前的时间,通过LocalDateTime.now()获取

当前的日期和时间,当我们打印LocalDate和LocalTime,或者是LocalDateTime的时候,它是严格的按照ISO-8601的格式打印的

我们还可以通过指定日期和时间,可以构造LocalDate,LocalTime,LocalDateTime,方法通过调用of方法,传入年月日,或者是

时分秒,得到LocalDate和LocalTime,传入年月日和时分秒,我们可以构造出一个DateTime,或者利用一个LocalDate,和LocalTime

对象,构造出一个新的LocalDateTime
新的API同样也提供了DateTimeFormatter对象,他和旧的SimpleDateFormat对象不一样的是,它是一个不可变类,我们通过

ofPattern这个方法,传入指定的格式化的字符串,可以得到DateFormatter这个对象,我们同样调用format和parse方法,

对日期进行格式化,或者从字符串解析出日期,默认情况下,LocalDate,LocalTime,LocalDateTime,是按照ISO标准格式

进行解析的,因此,我们采用的是标准的格式化日期,或者是时间,我们就可以通过LocalDate,LocalTime,LocalDateTime,

我们已经列出了几种标准的日期,时间,已经日期和时间的字符串,


新的API还有一个重大的更新,就是他增加了日期和时间的运算,我们通过LocalDate的plusDays,传入变量5,就可以在

先有的基础上加上5天,注意LocalDate是一个不变类,所以plusDays返回的是一个新的LocalDate对象,类似的我们

用MinusHours减掉2个小时,我们可以通过plusWeeks增加几周


我们还可以对日期和时间进行调整,例如我们获取到当前的日期,然后我们调用withDayOfMonth,传入1,就可以把日期

调整到日期的第一天,我们用withSecond(0).withNano(0)可以把秒和纳秒调整为0,我们还可以通过一个

TemporalAdjusters.lastDaysMonth(),我们就可以计算出本月的最后一天,我们可以通过TemporalAdjusters.firstInMonth

传入DayOfWeek,例如SUNDAY,我们就计算出了本月的第一个周日



新的API还提供了判断日期的先后,我们通过两个日期可以通过isBefore,或者isAfter,来判断他们的先后顺序,我们通过equals

也可以判断两个日期是否相等


我们还可以计算日期的Period,我们有一个utils方法可以得到一个Period对象,表示某一天到指定的另一天,他之间相差多少日期,

例如我们计算2016年1月20号到2050年1月1号,我们可以得到一个Period对象,我们打印这个对象,可以打印P33Y1M12D,表示这个

日期相差33年,1个月12天我们通过Priod.getYears(),getMonths(),getDays(),可以分别取出对应的整数
我们要注意,LocalDateTime是无法与Long进行转换的:

1. 这是因为从设计上LocalDateTime他是没有时区的概念,因为LocalDateTime他是没有时区,我们也无法确定某一个时刻

2. ZoneDateTime他是有时区的,所以他可以与Long交换


最后我们总结一下LocalDate,LocalTime,LocalDateTime:

1. 他们都是不变类

2. 默认按照ISO-8601标准格式化和解析

3. 我们使用DateTimeFormatter自定义格式化和解析

4. 我们可以通过plusDays和minusHours等方法对日期和时间进行加减,返回新的对象

5. 我们使用withDayOfMonth/with等方法调整日期和时间,返回新的对象

6. 我们还可以使用isBefore/isAfter/equals判断日期和时间的先后

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值