使用原生Java操作时间是比较麻烦的,比如说简单的创建一个指定时间
String time = "2018-7-3 11:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = sdf.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);
以上代码会输出
Wed Jan 03 11:00:00 CST 2018
再来看看Java官方推荐的Calendar类,实现相同的功能
Calendar calendar = Calendar.getInstance();
calendar.set(2018, 6, 3, 11, 0, 0);
Date time = calendar.getTime();
System.out.println(time);
也很麻烦,要是使用Joda呢
DateTime dateTime = new DateTime(2018, 7, 3, 11, 0, 0);
System.out.println(dateTime.toDate());
只需一行代码,本就该一行代码,这本就是个很简单的功能。
joda创建时间对象时需要指定时区,如果不指定,默认会把时区设置为运行代码的机器所在的时区。
joda是线程安全的,和String一样,采用了一种简单粗暴的方式来实现线程安全。
求指定时间三天后的时间
DateTime dateTime1 = dateTime.plusDays(3);
System.out.println(dateTime1.toDate());
求指定时间三月之后的时间
DateTime dateTime2 = dateTime.plusMonths(3);
System.out.println(dateTime2.toDate());
将joda日期对象转成jdk日期Date对象:
Date date1 = new Date(dateTime2.getMillis());
System.out.println(date1);
将jdk日期对象专成jdk Calendar日期对象:
Calendar calendar1 = dateTime.toCalendar(Locale.getDefault());
System.out.println(calendar1);