JodaTime相当于一个时间的工具类,习惯之后发现比java自带的时间操作类方便很多故查找网站自己整理几个常用的:
项目中引入pom:
<!-- https://mvnrepository.com/artifact/joda-time/joda-time -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.1</version>
</dependency>
Instant - 不可变的类,用来表示时间轴上一个瞬时的点 DateTime - 不可变的类,用来替换JDK的Calendar类 LocalDate - 不可变的类,表示一个本地的日期,而不包含时间部分(没有时区信息) LocalTime - 不可变的类,表示一个本地的时间,而不包含日期部分(没有时区信息) LocalDateTime - 不可变的类,表示一个本地的日期-时间(没有时区信息) 不可变得类就像String类一样,也就是说不存在线程安全问题.
简单常常使用的几个方法,链接也有,自己走一波…增加印象
private static void test02() {
//初始化一个DateTime对象
DateTime dateTime1 = new DateTime();
DateTime dateTime2 = new DateTime(2018,12,4,0,0,0);
//时间戳 * 1000,时间戳,DateTime相互转换,返回的是13位的,传也是,注意
DateTime dateTime3 = new DateTime(1456473917004L);
long millis = dateTime3.getMillis();
//DateTime对象和Date对象相互转换
DateTime dateTime4 = new DateTime(new Date());
Date date = dateTime4.toDate();
DateTime dateTime5 = new DateTime("2018-12-04T00:00:00.000+08:00");
//这个方法很好用,可以传不同格式的,跟着心走
System.out.println( dateTime5.toString("yyyy-MM-dd HH:mm:ss") );
}
with开头的方法(比如:withYear):用来设置DateTime实例到某个时间,因为DateTime是不可变对象,所以没有提供setter方法可供使用,with方法也没有改变原有的对象,而是返回了设置后的一个副本对象。下面这个例子,将2000-02-29的年份设置为1997。值得注意的是,因为1997年没有2月29日,所以自动转为了28日。
plus/minus开头的方法(比如:plusDay, minusMonths):用来返回在DateTime实例上增加或减少一段时间后的实例。
注意,在增减时间的时候,想象成自己在翻日历,所有的计算都将符合历法,由Joda-Time自动完成,不会出现非法的日期(比如:3月31日加一个月后,并不会出现4月31日)。
链接:https://www.jianshu.com/p/efdeda608780
还有很多get方法,比较简单,可以具体使用的时候再看,也无伤大雅
private static void test03() {
DateTime dateTime2000Year = new DateTime(2000,2,29,0,0,0);
System.out.println(dateTime2000Year); // out: 2000-02-29T00:00:00.000+08:00
DateTime dateTime1997Year =
dateTime2000Year.withYear(1997);
//没有set,get方法,每一次修改都是新的对象
System.out.println(dateTime1997Year); // out: 1997-02-28T00:00:00.000+08:00
//增加减少都是可以传负数的哦!!!
DateTime now = new DateTime();
System.out.println(now); // out: 2016-02-26T16:27:58.818+08:00
DateTime tomorrow = now.plusDays(1);
DateTime yesterday = now.plusDays(-1);
System.out.println(tomorrow); // out: 2016-02-27T16:27:58.818+08:00
DateTime lastMonth = now.minusMonths(1);
DateTime nextMonth = now.minusMonths(-1);
System.out.println(lastMonth); // out: 2016-01-26T16:27:58.818+08:00
DateTime now2 = new DateTime(); // 2016-02-26T16:51:28.749+08:00
now2.monthOfYear().getAsText(); // February
now2.monthOfYear().getAsText(Locale.KOREAN); // 2월
now2.dayOfWeek().getAsShortText(); // Fri
now2.dayOfWeek().getAsShortText(Locale.CHINESE); // 星期五
}
参考文档:
http://joda-time.sourceforge.net/
https://blog.csdn.net/weixin_39450045/article/details/78890539
https://www.jianshu.com/p/efdeda608780
常用:
本月第一天:
new DateTime(new DateTime().dayOfMonth().withMinimumValue().toString("yyyy-MM-dd")).toDate()