1 开始使用
- https://www.joda.org/joda-time/
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 -> DateTime
DateTime dateTime = new DateTime(new Date());
//DateTime -> Date
Date d1 = new Date(dateTime.getMillis());
Date d2 = dateTime.toDate();
// 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