一、用于取代Date对象的DateTime对象
再也不用Date SimpleDateFormat Calendar之间倒腾来倒腾去了!日期创建-获取-操作一步到位!
如果JDK版本更新到了8及以上,不妨尝试新的时间日期API(参见JDK8新特性随笔篇)
学习一个类的基本方式是了解其获取方式(构造器),与常用方法(API)
以下是引用自官网示例的Demo:
public static void main(String[] args) { DateTime dateTime = new DateTime("2017-9-14 21:55:18", "yyyy-MM-dd HH:mm:ss"); // 获取日期成员(年、季度、月、日)
int year = dateTime.year();// 年
System.out.println("year = " + year); int season = dateTime.season();// 季度
System.out.println("season = " + season); int month = dateTime.month();// 月份
System.out.println("month = " + month); int dayOfWeek = dateTime.dayOfWeek();// 周几
System.out.println("dayOfWeek = " + dayOfWeek); int dayOfMonth = dateTime.dayOfMonth();// 此月第N天
System.out.println("dayOfMonth = " + dayOfMonth); // 调整日期时间
DateTime dateTime1 = dateTime.offset(DateField.DAY_OF_MONTH, -1); System.out.println(dateTime1.toString()); }
结果:
二、强大的日期时间工具类——DateUtil
1.解析——字符串解析为日期
public static void main(String[] args) { // 日期字符串请补全为2位数字
String str1 = "2017-09-14"; String str2 = "2017-09-14 21:03:01"; // 自动感应格式
Date date1 = DateUtil.parse(str1); Date date2 = DateUtil.parse(str2); System.out.println("date1:"+date1); System.out.println("date2:"+date2); // 手动设置格式(其中DateTime是可以完全替代Date的一个子类)
DateTime dateTime1 = DateUtil.parse(str1, "yyyy-MM-dd"); DateTime dateTime2 = DateUtil.parse(str2, "yyyy-MM-dd HH:mm:ss"); System.out.println(dateTime1); System.out.println(dateTime2); }
2.格式化——将日期格式化为字符串
public static void main(String[] args) { // 日期字符串请补全为2位数字
String str1 = "2017-09-14"; // 自动感应格式
Date date1 = DateUtil.parse(str1); // 格式化为指定格式字符串
String s1 = DateUtil.format(date1, "yyyy年MM月dd日"); System.out.println("s1 = " + s1); // 常用格式格式化
String s2 = DateUtil.formatDate(date1); System.out.println("s2 = " + s2); }
结果:
3.获取日期成员(对比DateTime的操作)
public static void main(String[] args) { // 日期字符串请补全为2位数字
String str1 = "2017-09-14"; // 自动感应格式
Date date1 = DateUtil.parse(str1); // 获取指定日期成员(通过DateTime同样可以完成)
int year = DateUtil.year(date1); System.out.println("year = " + year); int dayOfMonth = DateUtil.dayOfMonth(date1); System.out.println("dayOfMonth = " + dayOfMonth); }
结果:
4.日期时间偏移
public static void main(String[] args) { // 日期字符串请补全为2位数字
String str1 = "2017-09-14"; // 自动感应格式
Date date1 = DateUtil.parse(str1); // 日期时间偏移
DateTime dateTime = DateUtil.offset(date1, DateField.HOUR_OF_DAY, 5); System.out.println("dateTime = " + dateTime); DateTime dateTime1 = DateUtil.offsetDay(date1, 1); System.out.println("dateTime1 = " + dateTime1); }
结果:
针对当前时间的简化偏移操作:
public static void main(String[] args) { // 当前时间的简化偏移方法
String now = DateUtil.now(); System.out.println("now = " + now); // 昨天
DateTime yesterday = DateUtil.yesterday(); System.out.println("yesterday = " + yesterday); // 明天
DateTime tomorrow = DateUtil.tomorrow(); System.out.println("tomorrow = " + tomorrow); // 上周
DateTime lastWeek = DateUtil.lastWeek(); System.out.println("lastWeek = " + lastWeek); // 下月
DateTime nextMonth = DateUtil.nextMonth(); System.out.println("nextMonth = " + nextMonth); }
结果:
5.其它:
public static void main(String[] args) { // 距今年龄
int age = DateUtil.ageOfNow("2008-12-22"); System.out.println("age = " + age); // 是否闰年
boolean leapYear = DateUtil.isLeapYear(2017); System.out.println("leapYear = " + leapYear); }
结果: