http://rensanning.iteye.com/blog/1546652

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

http://joda-time.sourceforge.net/

版本:joda-time-2.1.jar

1、时间类得作成

  1. //方法一:取系统点间
  2. DateTime dt1 = new DateTime();
  3. //方法二:通过java.util.Date对象生成
  4. DateTime dt2 = new DateTime(new Date());
  5. //方法三:指定年月日点分秒生成(参数依次是:年,月,日,时,分,秒,毫秒)
  6. DateTime dt3 = new DateTime(2012, 5, 20, 13, 14, 0, 0);
  7. //方法四:ISO8601形式生成
  8. DateTime dt4 = new DateTime("2012-05-20");
  9. DateTime dt5 = new DateTime("2012-05-20T13:14:00");
  10. //只需要年月日的时候
  11. LocalDate localDate = new LocalDate(2009, 9, 6);// September 6, 2009
  12. //只需要时分秒毫秒的时候
  13. LocalTime localTime = new LocalTime(13, 30, 26, 0);// 1:30:26PM

2、获取年月日点分秒

  1. DateTime dt = new DateTime();
  2. //年
  3. int year = dt.getYear();
  4. //月
  5. int month = dt.getMonthOfYear();
  6. //日
  7. int day = dt.getDayOfMonth();
  8. //星期
  9. int week = dt.getDayOfWeek();
  10. //点
  11. int hour = dt.getHourOfDay();
  12. //分
  13. int min = dt.getMinuteOfHour();
  14. //秒
  15. int sec = dt.getSecondOfMinute();
  16. //毫秒
  17. int msec = dt.getMillisOfSecond();

3、星期的特殊处理

  1. DateTime dt = new DateTime();
  2. //星期
  3. switch(dt.getDayOfWeek()) {
  4. case DateTimeConstants.SUNDAY:
  5. System.out.println("星期日");
  6. break;
  7. case DateTimeConstants.MONDAY:
  8. System.out.println("星期一");
  9. break;
  10. case DateTimeConstants.TUESDAY:
  11. System.out.println("星期二");
  12. break;
  13. case DateTimeConstants.WEDNESDAY:
  14. System.out.println("星期三");
  15. break;
  16. case DateTimeConstants.THURSDAY:
  17. System.out.println("星期四");
  18. break;
  19. case DateTimeConstants.FRIDAY:
  20. System.out.println("星期五");
  21. break;
  22. case DateTimeConstants.SATURDAY:
  23. System.out.println("星期六");
  24. break;
  25. }

4、与JDK日期对象的转换

  1. DateTime dt = new DateTime();
  2. //转换成java.util.Date对象
  3. Date d1 = new Date(dt.getMillis());
  4. Date d2 = dt.toDate();
  5. //转换成java.util.Calendar对象
  6. Calendar c1 = Calendar.getInstance();
  7. c1.setTimeInMillis(dt.getMillis());
  8. Calendar c2 = dt.toCalendar(Locale.getDefault());

5、日期前后推算

  1. DateTime dt = new DateTime();
  2. //昨天
  3. DateTime yesterday = dt.minusDays(1);
  4. //明天
  5. DateTime tomorrow = dt.plusDays(1);
  6. //1个月前
  7. DateTime before1month = dt.minusMonths(1);
  8. //3个月后
  9. DateTime after3month = dt.plusMonths(3);
  10. //2年前
  11. DateTime before2year = dt.minusYears(2);
  12. //5年后
  13. DateTime after5year = dt.plusYears(5);

6、取特殊日期

  1. DateTime dt = new DateTime();
  2. //月末日期
  3. DateTime lastday = dt.dayOfMonth().withMaximumValue();
  4. //90天后那周的周一
  5. DateTime firstday = dt.plusDays(90).dayOfWeek().withMinimumValue();

7、时区

  1. //默认设置为日本时间
  2. DateTimeZone.setDefault(DateTimeZone.forID("Asia/Tokyo"));
  3. DateTime dt1 = new DateTime();
  4. //伦敦时间
  5. DateTime dt2 = new DateTime(DateTimeZone.forID("Europe/London"));

8、计算区间

  1. DateTime begin = new DateTime("2012-02-01");
  2. DateTime end = new DateTime("2012-05-01");
  3. //计算区间毫秒数
  4. Duration d = new Duration(begin, end);
  5. long time = d.getMillis();
  6. //计算区间天数
  7. Period p = new Period(begin, end, PeriodType.days());
  8. int days = p.getDays();
  9. //计算特定日期是否在该区间内
  10. Interval i = new Interval(begin, end);
  11. boolean contained = i.contains(new DateTime("2012-03-01"));

9、日期比较

  1. DateTime d1 = new DateTime("2012-02-01");
  2. DateTime d2 = new DateTime("2012-05-01");
  3. //和系统时间比
  4. boolean b1 = d1.isAfterNow();
  5. boolean b2 = d1.isBeforeNow();
  6. boolean b3 = d1.isEqualNow();
  7. //和其他日期比
  8. boolean f1 = d1.isAfter(d2);
  9. boolean f2 = d1.isBefore(d2);
  10. boolean f3 = d1.isEqual(d2);

10、格式化输出

  1. DateTime dateTime = new DateTime();
  2. String s1 = dateTime.toString("yyyy/MM/dd hh:mm:ss.SSSa");
  3. String s2 = dateTime.toString("yyyy-MM-dd HH:mm:ss");
  4. String s3 = dateTime.toString("EEEE dd MMMM, yyyy HH:mm:ssa");
  5. String s4 = dateTime.toString("yyyy/MM/dd HH:mm ZZZZ");
  6. String s5 = dateTime.toString("yyyy/MM/dd HH:mm Z");

Jodd的JDateTime也提供了很不错的时间API。

参考资料:http://www.ibm.com/developerworks/cn/java/j-jodatime.html

Java日期计算之Joda-Time的更多相关文章

  1. 【转】Java日期计算之Joda-Time

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

  2. [Java]Java日期及时间库插件 -- Joda Time.

    来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用的都是JDK原生的时间处理API, 大家都知道Java原生的时间处 ...

  3. JAVA中日期转换和日期计算的方法

    日期的格式有很多形式,在使用过程中经常需要转换,下面是各种类型转换的使用例子以及日期计算方法的例子. 一.不同格式日期相互转换方法 public class TestDateConvertUtil { ...

  4. CCF201509-2 日期计算 java(100分)

    试题编号: 201509-2 试题名称: 日期计算 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 注意闰年的2月有2 ...

  5. Java日期时间API系列21-----Jdk8中java.time包中的新的日期时间API类,xk-time时间转换,计算,格式化,解析的工具

    通过工作之余,对Java8中java.time包源码的不断学习,使用和总结,开发了xk-time,初步完成,欢迎试用和提出建议! xk-time xk-time is a datetime conve ...

  6. Java实现 蓝桥杯 算法提高 日期计算

    算法提高 日期计算 时间限制:1.0s 内存限制:256.0MB 问题描述 已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况.尤其是逢百年不闰,逢400年闰的情 ...

  7. 编写Java程序随机输入日期计算星期几,打印任意一年的日历

    需求说明: 随机输入日期计算星期几,打印任意一年的日历 已知,1900年1月1日是星期1,用户随机输入年月日,计算星期几 实现思路: 一.知道1900年1月1日为星期一,求输入的年份月份与1900年1 ...

  8. JAVA中计算两个日期时间的差值竟然也有这么多门道

    上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼 ...

  9. java日期比较,日期计算

    版权声明:本文为楼主原创文章,未经楼主允许不得转载,如要转载请注明来源. 都是常用的日期之间的比较方法,供以后参考. 热身:获取当前时间 SimpleDateFormat df = new Simpl ...

随机推荐

  1. get the first and last collection item in Magento

    $product_collection->getFirstItem() $product_collection->getLastItem()

  2. varnish和squid的对比

    Varnish与Squid的对比  说到Varnish,不能不提Squid,Squid是一个高性能的代理缓存服务器,它和varnish之间有诸多的异同点,这里分析如下:  下面是他们之间的相同点:   ...

  3. OCP prepare 20140628

    1. null if       nvl     nvl2 NULLIF函数 Oracle NULLIF函数语法为NULLIF(表达式1,表达式2),如果表达式1和表达式2相等则返回空值,如果表达式1 ...

  4. 十全大补DBA学习资源

    学习oracle已经有1年多了,从开始的菜鸟到现在的DBA,一路走来~迷茫过.兴奋过.但我仍然会在DBA的道路上走下去!oracle要学的有很多,会遇到很多难题,网上有很多学习oracle好的学习资料 ...

  5. log4j日志输出配置

    # Configure logging for testing: optionally with log filelog4j.rootLogger=WARN, stdoutlog4j.rootLogg ...

  6. iOS通知NSNotificationCenter

    NSNotificationCenter消息通信 作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的. 注册通知:即要在什么地方接受消息 [[NSNotificat ...

  7. hibernate总结四

    HIbernate-查询语句 Hibernate Query Language (HQL) 是一个面向对象的查询语言,与Sql相似, 相对于sql对表和列的操作, HQL是对持久对象和他们的属性进行操 ...

  8. C++多态的实现原理

    1. 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数. 2. 存在虚函数的类都有一个一维的虚函数表叫做虚表.类的对象有一个指向虚表开始的虚指针.虚表是和类对应的,虚表指针是和对象 ...

  9. [原创]obj-c编程16:键值编码(KVC)

    原文链接:obj-c编程16:键值编码(KVC) 我们可以借助obj-c中的键值编码(以后简称KVC,Key-Value Coding)来存取类的属性,通过指定所要访问的属性名字符串标示符,可以使用存 ...

  10. 应用程序缓存 AppCache

    Application Cache HTML5提供了一系列的特性来支持离线应用: application cache localStrorage web SQL & indexed datab ...