Java Joda-Time 知识总结

本文详细介绍了如何使用Joda-Time库进行日期时间的操作,包括实例化、转换、格式化、比较、设置、增加减少时间、时区处理、日期间隔计算等。此外,还提到了相关类如Instant、LocalDate、LocalTime等以及时间段表示如Interval、Period、Duration的使用。通过示例代码展示了各种操作方法,是理解Joda-Time库的一个实用指南。
摘要由CSDN通过智能技术生成

1 开始使用

  implementation 'joda-time:joda-time:2.10.10'

2 时间实例

        // 年,月,日,时,分,秒,毫秒
DateTime dateTime1 = new DateTime(2017,6, 16, 0, 0, 0, 333);
        // 时间字符串
DateTime dateTime2 = new DateTime("2017-6-16 15:43:50");
        // 毫秒级时间
DateTime dateTime3 = new DateTime(1481006233254L);
        // 系统时间
DateTime dateTime4 = new DateTime();
        // Date -> DateTime
DateTime dateTime5 = new DateTime(new Date());
        // Calendar -> DateTime
DateTime dateTime6 = new DateTime(Calendar.getInstance());
        

3 String -> DateTime

// 方法1
DateTime dateTime = new DateTime("2017-6-16 15:43:50");

// 方法2
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dateTime= DateTime.parse("2017-6-16 23:22:45", format);




4 DateTime -> String

//方法1 
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
String time = dateTime.toString(format);

//方法2 
String time = dateTime.toString("yyyy-MM-dd HH:mm:ss");

5 时间比较

//和当前时间比
boolean b1 = dateTime.isAfterNow();
boolean b2 = dateTime.isBeforeNow();
boolean b3 = dateTime.isEqualNow(); 

//和其他日期比
boolean b1 = dateTime.isAfter(dateTime2);
boolean b2 = dateTime.isBefore(dateTime2);
boolean b3 = dateTime.isEqual(dateTime2);

6 设置时间 withXXX

7 增加时间 plusXXX

8 减少时间 minusXXX

9 获取时间 getXXX

10 和 jdk Date Calendar 转化

  • Date
// Date -> DateTime
DateTime dateTime = new DateTime(new Date());
       
//DateTime -> Date 
Date d1 = new Date(dateTime.getMillis());  
Date d2 = dateTime.toDate();  

  • Calendar
 // Calendar -> DateTime
DateTime dateTime = new DateTime(Calendar.getInstance());
        
        
//DateTime -> Calendar 

Calendar c1 = Calendar.getInstance();  
c1.setTimeInMillis(dateTime.getMillis());  


Calendar c2 = dateTime.toCalendar(Locale.getDefault());

11 时区相关

dateTime.toString("yyyy年MM月dd日 HH:mm:ss", Locale.CHINA);
 //默认设置为日本时区
DateTimeZone.setDefault(DateTimeZone.forID("Asia/Tokyo"));
DateTime dt1 = new DateTime();
System.out.println(dt1.toString("yyyy-MM-dd HH:mm:ss"));

//伦敦时区
DateTime dt2 = new DateTime(DateTimeZone.forID("Europe/London"));
System.out.println(dt2.toString("yyyy-MM-dd HH:mm:ss"));
        

12 日期相隔

  Days.daysBetween(start, end).getDays();
  Months.monthsBetween(start, end).getMonths();
  Years.yearsBetween(start, end).getYears();
  

13 相关类


        //某一时刻 
Instant instant=new Instant();
        
        //用于替代Calendar
DateTime dateTime=new DateTime();
        
        //本地日期,不带时区信息
LocalDate localDate=new LocalDate();
        
        //本地时间,不带时区信息
LocalTime localTime=new LocalTime();
        
        //本地日期时间,不带时区信息
LocalDateTime localDateTime=new LocalDateTime();

14 时间段

Interval:它保存了一个开始时刻和一个结束时刻,因此能够表示一段时间,并进行这段时间的相应操作

Period:它保存了一段时间,比如:6个月,3天,7小时这样的概念。可以直接创建Period,或者从Interval对象构建

Duration:它保存了一个精确的毫秒数。同样地,可以直接创建Duration,也可以从Interval对象构建

15 相关场景

        //获取 今天的开始时间 2017-06-16 00:00:00
nowTime.withTimeAtStartOfDay();
        
        
        //获取 今天的结束时间2017-06-16 23:59:59
nowTime.minuteOfDay().withMaximumValue();
        
        

参考文档

  • 使用Joda-Time优雅的处理日期时间 http://www.jianshu.com/p/efdeda608780
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

louisgeek

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

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

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

打赏作者

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

抵扣说明:

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

余额充值