替代JDK日期的开源项目:joda-time

作为一名开发者,我们不可避免的会使用日期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,即距离 1970 年 1 月 1 日子时格林威治标准时间(也称为 epoch)以来的毫秒数 )
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"

计算2个日期的时间差,例如获取2个时间相差多少天:
int days = Days.daysBetween(DateTime.now(), new DateTime("2012-05-30T10:23:1")).getDays();

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
 
D.Joda与JDK相互转换
 
joda是为了简化日期的开发,于是它也提供了对JDK日期的相互转换的API,这样您可以方便的切换日期的使用。
DateTime dateTime = new DateTime(new Date());
DateTime dateTime = new DateTime(Calendar.getInstance());
Date jdkDate = DateTime.now().toDate();
 
同时,JDK的日期API和joda都提供了获取毫秒数和通过毫秒数创建日期,也就是基于毫秒数这个桥梁,我们也可以进行互转
new DateTime(new Date().getTime())
new Date(DateTime.now().getMillis());
 
就是这么简单,您可以方便的互相转换,以进行您的日期计算。
 
总结:
joda-time是一个轻量级的开源项目,用过jdk自带的日期API,再对比joda-time,你会发现两者在用户使用方面的巨大差异,如果您用过joda-time,相信您再也不会再想用JDK的日期API
 
另外做一个小广告:
推荐使用为知笔记(Wiz),它是电脑、手机、平板都能用的云笔记软件,使用我的邀请注册可获VIP体验:http://www.wiz.cn/i/52bb933c  
 
原创文章,请注明引用来源:CM4J
文章参考:
posted on 2013-05-16 23:57 CM4J 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/cm4j/archive/2013/05/16/cm4j.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值