zoukankan      html  css  js  c++  java
  • 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()
    
    世界上所有的不公平都是由于当事人能力不足造成的.
  • 相关阅读:
    编程的核心思维
    对编程语言的一点总结
    End Poem
    linux下的errno对照表
    C++中的三个特殊宏:__FILE__,__FUNCTION__和__LINE__
    算法——从斐波那契数列谈起(一)
    [题解][HNOI2002][Luogu P2234] 营业额统计
    用STL水平衡树的题
    浅谈C++的智能指针
    cnblog代码高亮优化(tomorrow主题)
  • 原文地址:https://www.cnblogs.com/javayida/p/13347084.html
Copyright © 2011-2022 走看看