zoukankan      html  css  js  c++  java
  • 强大易用的日期和时间库 Joda Time

    Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成,并且它是线程安全的。

    Joda-Time主要的特点包括:

    1. 易于使用:Calendar让获取"正常的"的日期变得很困难,使它没办法提供简单的方法,而Joda-Time能够 直接进行访问域并且索引值1就是代表January。

    2. 易于扩展:JDK支持多日历系统是通过Calendar的子类来实现,这样就显示的非常笨重而且事实 上要实现其它日历系统是很困难的。Joda-Time支持多日历系统是通过基于Chronology类的插件体系来实现。

    3. 提供一组完整的功能:它打算提供 所有关系到date-time计算的功能.Joda-Time当前支持8种日历系统,而且在将来还会继续添加,有着比JDK Calendar更好的整体性能等等。

    引入jar 包

    <dependency>
           <groupId>joda-time</groupId>
           <artifactId>joda-time</artifactId>
           <version>2.6</version>
    </dependency>

    使用最多的五个日期时间类:
    - Instant - 不可变的类,用来表示时间轴上一个瞬时的点(时间戳)
    - DateTime - 不可变的类,用来替换JDK的Calendar类
    LocalDate - 不可变的类,表示一个本地的日期,而不包含时间部分(没有时区信息)
    - LocalTime - 不可变的类,表示一个本地的时间,而不包含日期部分(没有时区信息)
    - LocalDateTime - 不可变的类,表示一个本地的日期-时间(没有时区信息)

    getCenturyOfEra()               返回世纪单位(int)
    getYearOfCentury()              返回世纪年份(int)
    getYear()                       返回年(int)
    getWeekyear()                   返回对应年中周数(int)
    getMonthOfYear()                返回对应年的月数(int)
    getDayOfYear()                  返回对应年中天数(int)
    getDayOfMonth()                 返回对应月份中天数(int)
    getDayOfWeek()                  返回对应星期中天数(int)
    getHourOfDay()                  返回对应天中的小时(int)
    getMinuteOfDay()                返回对应天中的分钟数(int)
    getMinuteOfHour()               返回对应小时中的分钟数(int)
    getSecondOfDay()                返回对应天中的秒数(int)
    getSecondOfMinute()             返回对应分钟中的秒数(int)
    getMillis()                     返回毫秒数(int)
    getMillisOfDay()                返回对应天中的毫秒(int)
    getMillisOfSecond()             返回对应秒中的毫秒(int)
    getHourOfDay()                  返回对应天中的小时(int)
    toString(String pattern)        返回一个规定格式的String

    示例:

    1、创建任意时间对象

    //jdk  
    Calendar calendar=Calendar.getInstance();  
    calendar.set(2012, Calendar.NOVEMBER, 15, 18, 23,55);  
      
    //Joda-time  
    DateTime dateTime=new DateTime(2012, 12, 15, 18, 23,55); 

    2、计算两日期相差的天数 

    //jdk  
    Calendar start = Calendar.getInstance();   
    start.set(2012, Calendar.NOVEMBER, 14);  
      
    Calendar end = Calendar.getInstance();  
    end.set(2012, Calendar.NOVEMBER, 15);  
      
    long startTim = start.getTimeInMillis();  
    long endTim = end.getTimeInMillis();  
    long diff = endTim-startTim;  
    int days=(int) (diff/1000 / 3600 / 24);  
      
      
    //joda-time  
    LocalDate start=new LocalDate(2012, 12,14);  
    LocalDate end=new LocalDate(2012, 12, 15);  
    int days = Days.daysBetween(start, end).getDays(); 

    3、获取18天之后的某天在下个月的当前周的第一天日期

        //jdk  
    Calendar current = Calendar.getInstance();  
    current.add(Calendar.DAY_OF_MONTH, 18);  
    current.add(Calendar.MONTH, 1);  
         ......  
    DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    Date date = current.getTime();  
    String dateStr = dateFormat.format(date);  
    System.out.println(dateStr);  
      
    //joda-time  
    String dateStr = new DateTime().plusDays(18).plusMonths(1)  
        .dayOfWeek().withMinimumValue().toString("yyyy-MM-dd HH:mm:ss");  
    System.out.println(dateStr);  

    4、时间格式化

    DateTimeFormatter format = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss");  
      
     //时间解析  
    DateTime dateTime = DateTime.parse("2012-12-21 23:22:45", format);  
              
    //时间格式化,输出==> 2012/12/21 23:22:45 Fri  
    String string_u = dateTime.toString("yyyy/MM/dd HH:mm:ss EE");  
    System.out.println(string_u);  
              
    //格式化带Locale,输出==> 2012年12月21日 23:22:45 星期五  
    String string_c = dateTime.toString("yyyy年MM月dd日 HH:mm:ss EE",Locale.CHINESE);  
    System.out.println(string_c);

    5、与JDK互操作

    //通过jdk时间对象构造  
    Date date = new Date();  
    DateTime dateTime = new DateTime(date);  
      
    Calendar calendar = Calendar.getInstance();  
    dateTime = new DateTime(calendar);  
      
    // Joda-time 各种操作.....  
    dateTime = dateTime.plusDays(1) // 增加天  
                        .plusYears(1)// 增加年  
                        .plusMonths(1)// 增加月  
                        .plusWeeks(1)// 增加星期  
                        .minusMillis(1)// 减分钟  
                        .minusHours(1)// 减小时  
                        .minusSeconds(1);// 减秒数  
                          
    // 计算完转换成jdk 对象  
    Date date2 = dateTime.toDate();  
    Calendar calendar2 = dateTime.toCalendar(Locale.CHINA);

    原文链接:https://www.cnblogs.com/shamo89/p/9095868.html

  • 相关阅读:
    hdu 1823 Luck and Love 二维线段树
    UVA 12299 RMQ with Shifts 线段树
    HDU 4578 Transformation 线段树
    FZU 2105 Digits Count 线段树
    UVA 1513 Movie collection 树状数组
    UVA 1292 Strategic game 树形DP
    【ACM】hdu_zs2_1003_Problem C_201308031012
    qsort快速排序
    【ACM】nyoj_7_街区最短路径问题_201308051737
    【ACM】nyoj_540_奇怪的排序_201308050951
  • 原文地址:https://www.cnblogs.com/yrjns/p/12466133.html
Copyright © 2011-2022 走看看