Java中处理时间与日期是很常见的操作,jdk中基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大。于是就诞生了Joda-Time这个专门处理日期时间的库。(JDK1.8的API已经重写了日期库,引入的java.time包,其实也是借鉴了Joda-Time)
joda-time
joda-time
2.9.9
下面介绍一些常用的构造方法:
DateTime dt = new DateTime();
DateTime dt = new DateTime(new Date());
// 创建指定日期时间如:2017-11-27 14:30:50:500
DateTime dt = new DateTime(2017, 11, 27, 14, 30, 50, 500);
System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));
DateTime dt = new DateTime(2000, 11, 27, 0, 0, 0);
System.out.println(dt);
dt = dt.withYear(2017);// 设置年份为2017
System.out.println(dt);
时间获取:
DateTime dt = new DateTime(2000, 11, 27, 0, 0, 0);
System.out.println(dt);
dt = dt.withYear(2017); // 设置年份为2017
System.out.println(dt);
int year = dt.getYear();// 年
int month = dt.getMonthOfYear();// 月
int day = dt.getDayOfMonth();// 日
int hour = dt.getHourOfDay();// 小时
int minute = dt.getMinuteOfHour();// 分钟
int second = dt.getSecondOfMinute();// 秒
int millis = dt.getMillisOfSecond();// 毫秒
System.out.println(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second + ":" + millis);
String month2 = dt.monthOfYear().getAsText();
String day2 = dt.dayOfWeek().getAsShortText();
String day3 = dt.dayOfWeek().getAsShortText(Locale.CHINESE); // 以指定格式获取
System.out.println(month2);
System.out.println(day2);
System.out.println(day3);
时间计算:
dt = dt.plusDays(1);// 加一天
dt = dt.plusHours(1);// 加一小时
dt = dt.plusYears(-1);// 减一年
System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));
dt = dt.minusYears(1);// 减一年
dt = dt.minusMinutes(-30);// 加半个小时
System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));
与jdk互操作:
Date date = dt.toDate();
Calendar calendar = dt.toCalendar(Locale.CHINESE);
// 某些属性进行置0操作。比如,我想得到当天的0点时刻。
DateTime now = new DateTime();
now.dayOfWeek().roundCeilingCopy();
now.dayOfWeek().roundFloorCopy();
now.minuteOfDay().roundFloorCopy();
now.secondOfMinute().roundFloorCopy();
其它:还有许多其它方法(比如dateTime.year().isLeap()来判断是不是闰年)。它们的详细含义,请参照API
参考文档:
Java日期简化工具Joda Time
使用Joda-Time优雅的处理日期时间