美文网首页
Java时间处理-使用Joda-Time

Java时间处理-使用Joda-Time

作者: 任重而道元 | 来源:发表于2017-08-30 14:22 被阅读142次

    JDK在8之前的版本,对日期时间的处理相当麻烦,有些方法设计非常反人类。而Joda-Time使用起来不仅方便,而且可读性强。虽然JDK 8引用了新的时间处理类,而且参与设计的人也正是Joda-Time的作者,但是由于各种原因,很多项目还是使用的JDK7,使用Joda-Time还是一个不错的选择。

    添加maven依赖,当前最新的

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

    创建日期

    // jdk 创建日期
    Date date = new Date();
    //Joda-Time创建日期
    DateTime dateTime = new DateTime();
    DateTime dateTime = new DateTime(2016, 10, 01, 00, 00);
    

    日期格式化

    1. jdk 使用 SimpleDateFormat对日期进行格式化,但是SimpleDateFormat是非线程安全的

    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String dateStr = sdf.format(date);
    

    2. 使用Joda-Time格式化日期

    DateTime dateTime = new DateTime();
    String dateTimeStr = dateTime.toString("yyyy-MM-dd HH:mm:ss");
    
    DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
    String dateTimeStr = dtf.print(dateTime);
    
    String dateStr = "2016-09-22";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    try {
        Date date = sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
            
    DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd");
    DateTime dateTime = dtf.parseDateTime(dateStr);
    

    日期计算

    1.要得到40天之前的日期,在JDK中,计算日期非常复杂,必须借助日历Calendar来完成。

    Date today = new Date();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(today); // 设置日历
    calendar.add(Calendar.DAY_OF_MONTH, -40); // 将日历往回翻40天
    Date beforeDay = calendar.getTime(); // 日历返回日期
    

    2.在Joda-Time中,计算日期

    DateTime today = new DateTime();
    DateTime beforeDay = today.minusDays(40);
    

    3.如果要计算两个日期相差的天数,使用JDK实现

    int diffDays = (int) ((today.getTime() - beforeDay.getTime()) / (24*60*60*1000));
    

    4.使用Joda-Time实现日期相差天数,月数和年

    int diffDays = Days.daysBetween(yesterday, today).getDays();
    int diffMonths = Months.monthsBetween(yesterday, today).getMonths();
    

    兼容JDK日期

    Joda-Time另一个使用起来非常方便的地方就是与JDK日期类的互相转换。因为很多现成的接口可能是用JDk的日期作为入参或者出参,如果Joda-Time不能兼容,那很多方便就不复存在了。

    // Date to DateTime
    Date date = new Date();
    DateTime dateTime = new DateTime(date);
            
    // DateTime to Date
    Date date2 = dateTime.toDate();
            
    // Calendar to DateTime
    Calendar calender = Calendar.getInstance();
    DateTime dateTime2 =  new DateTime(calender);
            
    // DateTime to Calendar
    Calendar calendar2 = dateTime.toCalendar(Locale.CHINA);
    

    相关文章

      网友评论

          本文标题:Java时间处理-使用Joda-Time

          本文链接:https://www.haomeiwen.com/subject/sbgzdxtx.html