Java日期计算之Joda-Time

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、时间类得作成

Java代码  

  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、获取年月日点分秒

Java代码  

  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、星期的特殊处理

Java代码  

  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日期对象的转换

Java代码  

  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、日期前后推算

Java代码  

  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、取特殊日期

Java代码  

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

7、时区

Java代码  

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

8、计算区间

Java代码  

  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、日期比较

Java代码  

  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、格式化输出

Java代码  

  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

时间: 2024-10-03 04:03:00

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

Java日期时间API系列17-----Jdk8中java.time包中的新的日期时间API类,java日期计算4,2个日期对比,获取相差年月日部分属性和相差总的天时分秒毫秒纳秒等

通过Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别 ,可以看出java8设计非常好,新增了Period和Duration类,专用于对比2个时间场景: Period,可以获取2个时间相差的年月日的属性. Duration,可以获取2个时间相差总的天时分秒毫秒纳秒. 下面应用: /** * 获取2个日期的相差年月天的年数部分 * @param startInclusive * @param endExclusive

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

日期的格式有很多形式,在使用过程中经常需要转换,下面是各种类型转换的使用例子以及日期计算方法的例子. 一.不同格式日期相互转换方法 1 public class TestDateConvertUtil { 2 3 public static void main(String[] args) throws ParseException { 4 // 获取当前时间 5 Date date = new Date(); // 获取当前时间 6 long timestamp = System.curren

java实现的日期计算

这里讲的日期计算比较偏,用到的地方很少(比如获取今天所在周的周一或者周日,获取今天是本月的第几周...),这些方法是以前做项目遗留下来的,现在整理一下,跟大家分享. 工具类主要有一下方法: public static Date getFirstMondayOfMonth(String dateString, String dateFormat) throws Exception 获取指定月份的第一个星期一,比如2014-12 月的第一个周一是2014-12-01 public static in

全面解析Java日期时间API

时区 GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间. UTC(Universal Time Coordinated):统一协调时间,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间,标准 UTC 时间格式 yyyy-MM-dd'T'HH:mm:ss.SSSXXX. 格林尼治时间已经不再被作为标准时间使用,UTC 是最主要的世界时间标准. Java提供了获取当前时间的方法 Syst

java基础 计算今天距本月最后一天还剩多少天

Calendar  c = new GregorianCalendar();   //GregorianCalendar 是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统. GredorianCalendar 是一种混合日历,可由调用者通过调用setGregorianChange()来更改起始日期. Calendar c = new  Calendar.getInstance(TimeZone.getTimeZone("GMT+08:OO"));  //

利用java日期类生成数据仓库维度表

利用java日期类生成数据仓库维度表 Date类: 最基础的日期时间类,返回一个相对日期的毫秒数.精确到毫秒,但不支持日期的国际化和分时区显示.Date 类从Java 开发包(JDK)1.0 就开始进化,当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了,这种改进旨在更好的处理日期数据的国际化格式. Calender类: 相对于Date更加强大的时间类,是抽象类,提供了常规的日期修改功能和国际化

Java 日期时间处理

Java 日期时间处理 Date java.util.Date对象表示一个精确到毫秒的瞬间; 但由于Date从JDK1.0起就开始存在了,历史悠久,而且功能强大(既包含日期,也包含时间),所以他的大部分构造器/方法都已Deprecated,因此就不再推荐使用(如果贸然使用的话,可能会出现性能/安全方面的问题);下面我仅介绍它还剩下的为数不多的几个方法(这些方法的共同点是Date与毫秒值的转换): 构造器 Date(): 在底层调用System.currentTimeMillis()作为日期参数.

CalendarHelper日期计算工具,各种日期的获取和计算

今天分享一个日期获取和计算的工具类,这个最初是用在项目中获取每周每月日期用的. package com.ran.interview; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; /** * @auth

Java——日期格式

 /* * 日期对象和毫秒值之间的转换. * * 毫秒值--->日期对象: *  1.通过Date对象的构造方法new Date(timeMillis) *  2.还可以通过setTime设置. * 因为可以过Date对象的方法对该日期中的各个字段(年月日等进行操作) * * 日期对象-->毫秒值: * 2.getTime方法. * 因为可以通过具体的数值进行运算. */ public static void getTime() { /* * 对日期对象进行格式化: */ Date dat