美文网首页时间相关操作Joda time
Joda-Time LocalDate、LocalTime、Da

Joda-Time LocalDate、LocalTime、Da

作者: ba2cb747365a | 来源:发表于2018-11-27 11:42 被阅读119次

    背景

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

    核心对象

    LocalDate

    LocalDate跟DateTime的区别在于两点:

    • 没有时区
      比如北京程序员写下new LocalDate(),得到的是2018-11-27。如果想转换为伦敦的日期,对不起,转不了。因为LocalDate没有时区。
    • 没有时间
      说白了只有日期,没有10点:20分:23秒

    LocalTime

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

    • 没有时区
      比如北京程序员写下new LocalTime(),得到的是11:33:10。如何想转换为伦敦的时间,对不起,也转不了。因为LocalTime没有时区。
    • 没有日期
      说白了只有时间,没有2018-11-27

    DateTime

    • 有日期
      比如 2018-11-27
    • 有时间
      比如 11:33:10
    • 有时区
      比如 北京上海时区

    示例

    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是没有时区的,你需要知道时区才能还原出之前的时间。

    相关文章

      网友评论

        本文标题:Joda-Time LocalDate、LocalTime、Da

        本文链接:https://www.haomeiwen.com/subject/rmawqqtx.html