1.介绍
提供用于处理时间的方便类库,比 JDK 自带的 API 方便。详情移步官网
2. 积累
1 . DateTime
joda-time 提供强大的 DateTime 构造函数 ,可以将各种各样的数据都转为 DateTime 类型 ,以方便后续操作 。
★ long : 时间的毫秒级别
★ Date : JDK中 的类型
★ String : ISO8601 形式的字符串
★ Calendar : JDK 中的 Calendar
★ 任何 Joda-time date-time 类
i.e :
Calendar calendar = Calendar.getInstance();
DateTime dateTime = new DateTime(calendar); //Jdk Calendar
DateTime dateTime1 = new DateTime(new Date().getTime()); //long
DateTime dateTime2 = new DateTime(new Date()); // Jdk Date
DateTime dateTime3 = new DateTime();
DateTime dateTime4 = DateTime.now();
DateTime dateTime5 = new DateTime("2016-08-31");
DateTime dateTime6 = new DateTime(2016,8,31,9,10);
DateTime dateTime7 = DateTime.parse("20171110", DateTimeFormat.forPattern("YYYYMMdd"));
long now = dateTime4.getMillis(); //DateTime → long
Date date2 = dateTime4.toDate(); //DateTime → Jdk Date
String string = dateTime4.toString("y-MM-dd"); //DateTime → String
String str = dateTime4.toString(DateTimeFormat.forPattern("y-M-d zz H:m:s.SSS ZZ"));
System.out.println(dateTime.toString()); //2016-08-31T09:11:05.238+08:00
System.out.println(dateTime1.toString());//同上
System.out.println(dateTime2.toString());//同上
System.out.println(dateTime3.toString());//同上
System.out.println(dateTime4.toString());//同上
System.out.println(dateTime5.toString()); //2016-08-31T00:00:00.000+08:00
System.out.println(dateTime6.toString()); //2016-08-31T09:10:00.000+08:00
System.out.println(string); //2016-08-31
System.out.println(str); //2016-8-31 CST 9:11:5.238 +08:00
pattern 子母代表的含义如下表(详情参看 Joda-time 官网):
Symbol Meaning Presentation Examples ------ ------- ------------ ------- G era text AD C century of era (>=0) number 20 Y year of era (>=0) year 1996 x weekyear year 1996 w week of weekyear number 27 e day of week number 2 E day of week text Tuesday; Tue y year year 1996 D day of year number 189 M month of year month July; Jul; 07 d day of month number 10 a halfday of day text PM K hour of halfday (0~11) number 0 h clockhour of halfday (1~12) number 12 H hour of day (0~23) number 0 k clockhour of day (1~24) number 24 m minute of hour number 30 s second of minute number 55 S fraction of second number 978 z time zone text Pacific Standard Time; PST Z time zone offset/id zone -0800; -08:00; America/Los_Angeles ' escape for text delimiter '' single quote literal其中字母可重叠使用,例如 :
M : 8(月)
MM : 08(月)
Z : -0800
ZZ : -08:00
S : 9
SS : 97
SSS : 978
2. 获取当前时间的开始 | 结束
i.e :获取 2016年8月31日的开始和 结束
DateTime dateTime = new DateTime();
DateTime begin = dateTime.withTimeAtStartOfDay();
DateTime begin2 = dateTime.millisOfDay().withMinimumValue();
DateTime end = dateTime.millisOfDay().withMaximumValue();
System.out.println(begin); //2016-08-31T00:00:00.000+08:00
System.out.println(begin2); //2016-08-31T00:00:00.000+08:00
System.out.println(end); //2016-08-31T23:59:59.999+08:00
3. 年月日等的加减操作
i.e : + plus
- minus
DateTime dateTime = DateTime.parse("2016-08-31 08:00:00",DateTimeFormat.forPattern("y-MM-dd HH:mm:ss"));
DateTime dateTime1 = dateTime.plusHours(2); // 2016-08-31T10:00:00.000+08:00
DateTime dateTime2 = dateTime.plusDays(2); //2016-09-02T08:00:00.000+08:00
DateTime dateTime3 = dateTime.minusMonths(2); //2016-06-30T08:00:00.000+08:00
DateTime dateTime4 = dateTime.plusYears(2); //2018-08-31T08:00:00.000+08:00
System.out.println(dateTime1);
System.out.println(dateTime2);
System.out.println(dateTime3);
System.out.println(dateTime4);