} } }

    调换JDK日期的开源项目:joda-time

    添加时间:2013-5-17 点击量:

    作为一名开辟者,我们不成避免的会应用日期API,若是您应用过JDK的API,或者您会发明JDK的API用的很别扭,尤其是在做日期运算和斗劲的时辰,幸好我们活在开源的世界,也有其他伴侣碰到同样的题目,是以joda-time就如许应运而生,jotat-time就是为了简化日期的操纵而创建的一个开源项目,正如您期望中的那样,它极大的简化了日期的操纵。



    日期API的常用应用的几个方面首要有以下几个:

    A.机关一个日期

    B.对日期进交运算和斗劲

    C.日期的格局化输出

     

    A.机关一个日期

     


     

    基于上方的API,您就可以便利的指定年代日、时分秒或者毫秒数来构建一个日期,但这里要重点存眷的是第五个API:

    public DateTime(Object instant),这个机关函数传递一个Object对象,这个对象可所以以下几个类型:

     

    ReadableInstant
    String(可以被ISODateTimeFormat#dateTimeParser()解析的字符串)
    Calendar
    Date (includes sql package subclasses)
    Long (milliseconds)
    null (当前时候)

     

    示例如下:

    DateTime dateTime = new DateTime(new Date());

    DateTime dateTime = new DateTime(Calendar.getInstance());

    DateTime dateTime = new DateTime(2012-05-30T10:23:1);

     

    B.对日期进交运算和斗劲

     

    也许joda的机关函数只是简单的API调用,但对于日期的运算和斗劲,则是joda的强大之处,也是我们日常平凡应用最多的方面:

    下面用一个例子来演示joda的强大之处:

     

    策画11月中第一个礼拜一之后的第一个礼拜二

    DateTime dateTime = new DateTime().monthOfYear()
         .setCopy(11) // November
         .dayOfMonth() // Access Day Of Month Property
         .withMinimumValue() // Get its minimum value
         .plusDays(6) // Add 6 days
         .dayOfWeek() // Access Day Of Week Property
         .setCopy(礼拜一) // Set to Monday (it will round down)
         .plusDays(1); // Gives us Tuesday

     

    上方的一段代码中,第3行有一段dayOfMonth()的调用,joda称之为属性,类似于java的属性,基于这个属性,我们可以调用joda的API做一些日期的增减,获取最大最小值等操纵。

    再看代码第七行 .setCopy(礼拜一),它是全部策画的关键,如许的话,在每月的开端再加上 6 天就可以或许让您获得第一个礼拜一。再加上一天就获得第一个礼拜二。这里应用参数 “礼拜一” 是和Locale相干的,建议可以应用1调换,若是您在美国地区,这个参数就须要设置为Monday

     

    Joda 使得履行日期策画变得很是轻易,这就是joda的强大之处,想想如果应用jdk的日期API,得要几许步调才干完成上方的功能。

     

    对于日期斗劲,joda-time也供给了一些API去进行常用日期斗劲,如:

     


     

    C.日期的格局化输出

     

    Joda的日期格局化供给了简单的API接口:toString(),若是你须要的话,也可以传一个ISO-8601或者一个JDK把握的字符串格局,来告诉API如何输出日期格局

     


     

    1.应用ISO-8601





    DateTime dateTime = new DateTime();
    System.out.println(dateTime.toString(ISODateTimeFormat.basicDateTime()));
    System.out.println(dateTime.toString(ISODateTimeFormat.basicDateTimeNoMillis()));

    System.out.println(dateTime.toString(ISODateTimeFormat.basicWeekDateTime()));

     

    以上代码输出:





    20130516T192141.859+0800
    20130516T192141+0800

    2013W204T192141.859+0800

     

    2.应用SimpleDateFormat字符串

    System.out.println(dateTime.toString(MM/dd/yyyy hh:mm:ss.SSSa));
    System.out.println(dateTime.toString(dd-MM-yyyy HH:mm:ss));
    System.out.println(dateTime.toString(EEEE dd MMMM, yyyy HH:mm:ssa));
    System.out.println(dateTime.toString(MM/dd/yyyy HH:mm ZZZZ));
    System.out.println(dateTime.toString(MM/dd/yyyy HH:mm Z));

     

    以上代码输出:

    16-05-2013 19:25:12

    礼拜四 16 蒲月, 2013 19:25:12下午

    05/16/2013 19:25 Asia/Shanghai

    05/16/2013 19:25 +0800

     

    具体格局可以查看javadoc:DateTimeFormat

     

    joda-time是一个轻量级的开源项目,用过jdk自带的日期API,再对比joda-time,你会发明两者在用户应用方面的重大差别,若是您用过joda-time,信赖您再也不会再想用JDK的日期API

     

    文章参考:

    http://h819.iteye.com/blog/611099





    文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》
    分享到: