时间相关操作Joda time

Joda-Time LocalDate、LocalTime、Da

2018-11-27  本文已影响119人  ba2cb747365a

背景

在之前的故事中,提的最多的是DateTime,看过Joda-Time的会发现还有两个类,LocalDate和LocalTime,使用起来也类似,那么它们之间的区别是什么。作为容易混淆的概念,有必要来澄清一下

核心对象

LocalDate

LocalDate跟DateTime的区别在于两点:

LocalTime

LocalTime跟DateTime的区别也在于两点:

DateTime

示例

DateTime 转LocalDate场景

//2018-11-27 11:33:10 DateTime默认取系统时区,比如我本机北京上海时区
DateTime beijing10 = new DateTime().withYear(2018).withMonthOfYear(11).withDayOfMonth(27).withTime(11,33,10,0);
//倒退8个小时
DateTime beijing8 = beijing10.plusHours(-8);
//转为伦敦时间
DateTime london = beijing8.withZone(DateTimeZone.UTC);
//输出2018-11-27
LocalDate localDateBeijing = beijing8.toLocalDate();
//输出2018-11-26
LocalDate localDateLondon = beijing8.toLocalDate();

转为LocalDate后,DateTime时区和时间属性就丢掉了。无法得知原先的时区是哪个了。

DateTime 转LocalTime场景

//2018-11-27 11:33:10 DateTime默认取系统时区,比如我本机北京上海时区
DateTime beijing10 = new DateTime().withYear(2018).withMonthOfYear(11).withDayOfMonth(27).withTime(11,33,10,0);
//倒退8个小时
DateTime beijing8 = beijing10.plusHours(-8);
//转为伦敦时间
DateTime london = beijing8.withZone(DateTimeZone.UTC);
LocalTime localTime = london.toLocalTime()

同样时区改变后,再转为LocalTime,得到的就是03:33:10。转换不到原先的北京时间了

LocalDate 与 LocalTime 组装成DateTime

LocalDate nowDate = new LocalDate();
LocalTime nowTime = new LocalTime();

//北京时区
DateTime now = nowDate.toDateTime(nowTime).withZone(DateTimeZone.forOffsetHours(8));

因为LocalDate和LocalTime是没有时区的,你需要知道时区才能还原出之前的时间。

上一篇下一篇

猜你喜欢

热点阅读