jodaTime的使用

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()
posted @ 2018-12-04 14:47  你就像甜甜的益达  阅读(86)  评论(0编辑  收藏  举报