论坛首页 综合技术论坛

强大易用的日期和时间库 Joda Time

浏览 2603 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-12-27   最后修改:2012-12-27

    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更好的整体性能等等。

 

附上几个例子:

 

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);
 

 




 

论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics