zoukankan      html  css  js  c++  java
  • Joda-Time的使用


    Joda-Time的使用

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/backbug/article/details/78646152

    简介

       Java中处理时间与日期是很常见的操作,jdk中基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大。于是就诞生了Joda-Time这个专门处理日期时间的库。(JDK1.8的API已经重写了日期库,引入的java.time包,其实也是借鉴了Joda-Time)

    依赖jar包

     
    1.  
      <dependency>
    2.  
      <groupId>joda-time</groupId>
    3.  
      <artifactId>joda-time</artifactId>
    4.  
      <version>2.9.9</version>
    5.  
      </dependency>

    类说明

    • Instant:不可变类,代表时间线上的一个瞬时的时间点
    • DateTime:不可变类,它以毫秒级的精度封装时间上的某个瞬间时刻,用来替换JDK的Calendar类
    • LocalDate:不可变类,该类封装了一个年/月/日的组合。没有时区信息
    • LocalTime:不可变类,表示一个本地的时间,而不包含日期部分。没有时区信息
    • LocalDateTime:不可变类,该类封装了一个年/月/日 时:分:秒的组合。没有时区信息

    使用

    构造一个DateTime实例

    下面介绍一些常用的构造方法:

    • DateTime():这个无参的构造方法会创建一个在当前系统所在时区的当前时间,精确到毫秒
    • DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute):这个构造方法方便快速地构造一个指定的时间,这里精确到秒,类似地其它构造方法也可以传入毫秒。
    • DateTime(long instant):这个构造方法创建出来的实例,是通过一个long类型的时间戳,它表示这个时间戳距1970-01-01T00:00:00Z的毫秒数。使用默认的时区。
    • DateTime(Object instant):这个构造方法可以通过一个Object对象构造一个实例。这个Object对象可以是这些类型:ReadableInstant, String, Calendar和Date。其中String的格式需要是ISO8601格式
    1.  
      DateTime dt = new DateTime();
    2.  
       
    3.  
      DateTime dt = new DateTime(new Date());
    4.  
       
    5.  
      // 创建指定日期时间如:2017-11-27 14:30:50:500
    6.  
      DateTime dt = new DateTime(2017, 11, 27, 14, 30, 50, 500);
    7.  
       
    8.  
      System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));

    方法:

    • with开头的方法(比如:withYear):用来设置DateTime实例的某个时间。因为DateTime是不可变对象,所以没有提供setter方法可供使用,with方法也没有改变原有的对象,而是返回了设置后的一个副本对象。
    • plus/minus开头的方法(比如:plusDay, minusMonths):用来返回在DateTime实例上增加或减少一段时间后的实例。
    • 返回Property的方法:Property是DateTime中的属性,保存了一些有用的信息。
    1.  
      DateTime dt = new DateTime(2000, 11, 27, 0, 0, 0);
    2.  
      System.out.println(dt);
    3.  
      dt = dt.withYear(2017);// 设置年份为2017
    4.  
      System.out.println(dt);

    时间获取:

    1.  
      DateTime dt = new DateTime(2000, 11, 27, 0, 0, 0);
    2.  
      System.out.println(dt);
    3.  
      dt = dt.withYear(2017); // 设置年份为2017
    4.  
      System.out.println(dt);
    1.  
      int year = dt.getYear();// 年
    2.  
      int month = dt.getMonthOfYear();// 月
    3.  
      int day = dt.getDayOfMonth();// 日
    4.  
      int hour = dt.getHourOfDay();// 小时
    5.  
      int minute = dt.getMinuteOfHour();// 分钟
    6.  
      int second = dt.getSecondOfMinute();// 秒
    7.  
      int millis = dt.getMillisOfSecond();// 毫秒
    8.  
       
    9.  
      System.out.println(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second + ":" + millis);

    1.  
      String month2 = dt.monthOfYear().getAsText();
    2.  
      String day2 = dt.dayOfWeek().getAsShortText();
    3.  
      String day3 = dt.dayOfWeek().getAsShortText(Locale.CHINESE); // 以指定格式获取
    4.  
      System.out.println(month2);
    5.  
      System.out.println(day2);
    6.  
      System.out.println(day3);

    时间计算:

    1.  
      dt = dt.plusDays(1);// 加一天
    2.  
      dt = dt.plusHours(1);// 加一小时
    3.  
      dt = dt.plusYears(-1);// 减一年
    4.  
      System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));
    5.  
       
    6.  
      dt = dt.minusYears(1);// 减一年
    7.  
      dt = dt.minusMinutes(-30);// 加半个小时
    8.  
      System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));

    与jdk互操作:

    1.  
      Date date = dt.toDate();
    2.  
      Calendar calendar = dt.toCalendar(Locale.CHINESE);
    1.  
      // 某些属性进行置0操作。比如,我想得到当天的0点时刻。
    2.  
      DateTime now = new DateTime();
    3.  
      now.dayOfWeek().roundCeilingCopy();
    4.  
      now.dayOfWeek().roundFloorCopy();
    5.  
      now.minuteOfDay().roundFloorCopy();
    6.  
      now.secondOfMinute().roundFloorCopy();

    其它:还有许多其它方法(比如dateTime.year().isLeap()来判断是不是闰年)。它们的详细含义,请参照API

    参考文档:

    Java日期简化工具Joda Time

    使用Joda-Time优雅的处理日期时间

  • 相关阅读:
    结对-贪吃蛇游戏结对编项目设计文档
    java基础语法day04
    java基础语法day03
    轻量化ViewController的几个小技巧
    __weak与__block修饰符的区别
    OC与Swift的主要区别
    copy与retain /深拷贝与浅拷贝
    如何理解MVC设计模式
    iOS常见加密方法
    关于RunLoop
  • 原文地址:https://www.cnblogs.com/handsome1013/p/9674583.html
Copyright © 2011-2022 走看看