Joda-Time

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

JavaDoc: http://joda-time.sourceforge.net/apidocs/index.html

直接看代码,这是在网上和根据API整理的一些例子,使用时看例子就可以了

Java代码  
  1. package com.yan.joda;
  2. import java.util.Calendar;
  3. import java.util.Date;
  4. import java.util.Locale;
  5. import org.joda.time.DateTime;
  6. import org.joda.time.Days;
  7. import org.joda.time.LocalDate;
  8. import org.joda.time.format.DateTimeFormat;
  9. import org.joda.time.format.DateTimeFormatter;
  10. public class JodaTest {
  11. public static void main(String[] args) {
  12. //初始化时间
  13. DateTime dateTime=new DateTime(2012, 12, 13, 18, 23,55);
  14. // 年,月,日,时,分,秒,毫秒
  15. DateTime dt3 = new DateTime(2011, 2, 13, 10, 30, 50, 333);// 2010年2月13日10点30分50秒333毫秒
  16. //下面就是按照一点的格式输出时间
  17. String str2 = dateTime.toString("MM/dd/yyyy hh:mm:ss.SSSa");
  18. String str3 = dateTime.toString("dd-MM-yyyy HH:mm:ss");
  19. String str4 = dateTime.toString("EEEE dd MMMM, yyyy HH:mm:ssa");
  20. String str5 = dateTime.toString("MM/dd/yyyy HH:mm ZZZZ");
  21. String str6 = dateTime.toString("MM/dd/yyyy HH:mm Z");
  22. DateTimeFormatter format = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss");
  23. //时间解析
  24. DateTime dateTime2 = DateTime.parse("2012-12-21 23:22:45", format);
  25. //时间格式化,输出==> 2012/12/21 23:22:45 Fri
  26. String string_u = dateTime2.toString("yyyy/MM/dd HH:mm:ss EE");
  27. System.out.println(string_u);
  28. //格式化带Locale,输出==> 2012年12月21日 23:22:45 星期五
  29. String string_c = dateTime2.toString("yyyy年MM月dd日 HH:mm:ss EE",Locale.CHINESE);
  30. System.out.println(string_c);
  31. DateTime dt1 = new DateTime();// 取得当前时间
  32. // 根据指定格式,将时间字符串转换成DateTime对象,这里的格式和上面的输出格式是一样的
  33. DateTime dt2 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("2012-12-26 03:27:39");
  34. //计算两个日期间隔的天数
  35. LocalDate start=new LocalDate(2012, 12,14);
  36. LocalDate end=new LocalDate(2013, 01, 15);
  37. int days = Days.daysBetween(start, end).getDays();
  38. //计算两个日期间隔的小时数,分钟数,秒数
  39. //增加日期
  40. DateTime dateTime1 = DateTime.parse("2012-12-03");
  41. dateTime1 = dateTime1.plusDays(30);
  42. dateTime1 = dateTime1.plusHours(3);
  43. dateTime1 = dateTime1.plusMinutes(3);
  44. dateTime1 = dateTime1.plusMonths(2);
  45. dateTime1 = dateTime1.plusSeconds(4);
  46. dateTime1 = dateTime1.plusWeeks(5);
  47. dateTime1 = dateTime1.plusYears(3);
  48. // Joda-time 各种操作.....
  49. dateTime = dateTime.plusDays(1) // 增加天
  50. .plusYears(1)// 增加年
  51. .plusMonths(1)// 增加月
  52. .plusWeeks(1)// 增加星期
  53. .minusMillis(1)// 减分钟
  54. .minusHours(1)// 减小时
  55. .minusSeconds(1);// 减秒数
  56. //判断是否闰月
  57. DateTime dt4 = new DateTime();
  58. org.joda.time.DateTime.Property month = dt4.monthOfYear();
  59. System.out.println("是否闰月:" + month.isLeap());
  60. //取得 3秒前的时间
  61. DateTime dt5 = dateTime1.secondOfMinute().addToCopy(-3);
  62. dateTime1.getSecondOfMinute();// 得到整分钟后,过的秒钟数
  63. dateTime1.getSecondOfDay();// 得到整天后,过的秒钟数
  64. dateTime1.secondOfMinute();// 得到分钟对象,例如做闰年判断等使用
  65. // DateTime与java.util.Date对象,当前系统TimeMillis转换
  66. DateTime dt6 = new DateTime(new Date());
  67. Date date = dateTime1.toDate();
  68. DateTime dt7 = new DateTime(System.currentTimeMillis());
  69. dateTime1.getMillis();
  70. Calendar calendar = Calendar.getInstance();
  71. dateTime = new DateTime(calendar);
  72. }
  73. }

下面是一个小例子用来计算小宝宝从出生到现在总共的天数小时数等,首先用jdk的类去做,不用joda,然后再用joda去做,以做比较

用jdk做的例子,这里算的从出生到现在的时间间隔是准确的,如果是输入的某天来算的话就不是很准确,多一秒就算一天。可以看到用jdk去做的话,要写的代码还是挺繁琐的。

Java代码  
  1. import java.text.SimpleDateFormat;
  2. import java.util.Calendar;
  3. import java.util.Date;
  4. import java.util.Scanner;
  5. public class CalBaby {
  6. private final static String birthday = "2012-3-10 08:20:55";
  7. /**
  8. * @param args
  9. */
  10. public static void main(String[] args) {
  11. while(true){
  12. String format1 = "yyyy-MM-dd";
  13. String format2 = "yyyy-MM-dd HH:mm:ss";
  14. Scanner s = new Scanner(System.in);
  15. System.out.println("########################################");
  16. cutTwoDateToDay(convertToDate1(birthday,format2),new Date(),false);
  17. System.out.println("请选择操作");
  18. System.out.println("请输入日期(格式例如:2012-11-08)");
  19. System.out.println("########################################");
  20. String endDateStr = s.nextLine();
  21. Date endDate = convertToDate1(endDateStr,format1);
  22. if(endDate == null){
  23. System.out.println("输入格式错误!请重新输入.");
  24. continue;
  25. }
  26. boolean inputFlag = true;
  27. cutTwoDateToDay(convertToDate1(birthday,format2),endDate,inputFlag);
  28. }
  29. }
  30. /**
  31. * 计算两个日期之间的差距天数
  32. *
  33. * @param a
  34. * @param b
  35. * @return
  36. */
  37. public static void cutTwoDateToDay(Date beginDate, Date endDate,boolean inputFlag) {
  38. Calendar calendar = Calendar.getInstance();
  39. long intervalDays = 0;
  40. calendar.setTime(beginDate);
  41. long begin = calendar.getTimeInMillis();
  42. calendar.setTime(endDate);
  43. long end = calendar.getTimeInMillis();
  44. long totalM = end - begin;
  45. System.out.println((end -begin));
  46. System.out.println(24*60*60*1000);
  47. intervalDays = totalM /(24*60*60*1000);
  48. long intervalHours = (totalM - (intervalDays*24*60*60*1000))/(60*60*1000);
  49. long intervalMin = (totalM - intervalDays * (24*60*60*1000) - intervalHours*60*60*1000)/(60*1000);
  50. if(inputFlag){
  51. if(totalM > 0L && totalM %(24*60*60*1000) > 0L){
  52. intervalDays = intervalDays + 1;
  53. }
  54. System.out.println("宝宝从出生到"+formatDate(endDate,"yyyy-MM-dd")+"已经"+intervalDays+"天了");
  55. }else{
  56. System.out.println("宝宝来到这个世界已经"+intervalDays+"天"+intervalHours+"小时"+intervalMin+"分钟了");
  57. }
  58. }
  59. /**
  60. * 将字符串日期转换为Date   yyyy-MM-dd HH:mm:ss  yyyy-MM-dd
  61. *
  62. * @param s
  63. * @return
  64. */
  65. public static Date convertToDate1(String s,String format) {
  66. if (s == null) {
  67. return null;
  68. }
  69. try {
  70. SimpleDateFormat df = new SimpleDateFormat(format);
  71. return df.parse(s);
  72. } catch (Exception e) {
  73. return null;
  74. }
  75. }
  76. public static String formatDate(Date date, String strType)
  77. {
  78. if (date == null)
  79. {
  80. return null;
  81. }
  82. SimpleDateFormat sdf = new SimpleDateFormat(strType);
  83. try
  84. {
  85. return sdf.format(date);
  86. }
  87. catch (Exception e)
  88. {
  89. return null;
  90. }
  91. }
  92. }

下面是用joda来做,用这个来做就简单的多了,而且也很准确。

Java代码  
  1. import java.util.Scanner;
  2. import org.joda.time.DateTime;
  3. import org.joda.time.Days;
  4. import org.joda.time.LocalDate;
  5. import org.joda.time.format.DateTimeFormat;
  6. import org.joda.time.format.DateTimeFormatter;
  7. public class CalBabyJoda {
  8. private final static String birthday = "2012-3-10 08:20:55";
  9. public static void main(String[] args) {
  10. while(true){
  11. Scanner s = new Scanner(System.in);
  12. System.out.println("########################################");
  13. DateTimeFormatter format1 = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss");
  14. DateTimeFormatter format2 = DateTimeFormat .forPattern("yyyy-MM-dd");
  15. DateTime startDateTime = DateTime.parse(birthday, format1);
  16. System.out.println("宝宝来到这个世界已经");
  17. calDateToDay(startDateTime,new DateTime());
  18. System.out.println("如选择其它日期请输入(格式例如:2012-11-08 14:24:54或着2012-11-08)");
  19. System.out.println("########################################");
  20. String endDate = s.nextLine();
  21. DateTime endDateTime = null;
  22. try{
  23. endDateTime = DateTime.parse(endDate,format1);
  24. }catch(Exception e){
  25. try{
  26. endDateTime = DateTime.parse(endDate,format2);
  27. }catch(Exception e1){
  28. System.out.println("输入格式错误!请重新输入.");
  29. continue;
  30. }
  31. }
  32. System.out.println("宝宝从出生到" + endDateTime.toString("yyyy-MM-dd HH:mm:ss") + "已经");
  33. calDateToDay(startDateTime,endDateTime);
  34. }
  35. }
  36. public static void calDateToDay(DateTime startDateTime,DateTime endDateTime){
  37. LocalDate start=new LocalDate(startDateTime);
  38. LocalDate end=new LocalDate(endDateTime);
  39. Days days = Days.daysBetween(start, end);
  40. int intervalDays = days.getDays();
  41. int intervalHours = endDateTime.getHourOfDay() - startDateTime.getHourOfDay();
  42. int intervalMinutes = endDateTime.getMinuteOfHour() - startDateTime.getMinuteOfHour();
  43. int intervalSeconds = endDateTime.getSecondOfMinute() - startDateTime.getSecondOfMinute();
  44. if(intervalSeconds < 0){
  45. intervalMinutes = intervalMinutes -1;
  46. intervalSeconds = 60 + intervalSeconds;
  47. }
  48. if(intervalMinutes < 0){
  49. intervalHours = intervalHours -1;
  50. intervalMinutes = 60 + intervalMinutes;
  51. }
  52. if(intervalHours < 0){
  53. intervalDays = intervalDays -1;
  54. intervalHours = 24 + intervalHours;
  55. }
  56. System.out.println(intervalDays + "天" + intervalHours +
  57. "小时" + intervalMinutes + "分钟" + intervalSeconds + "秒");
  58. System.out.println("############################");
  59. }
  60. }
原文链接:http://ylq365.iteye.com/blog/1769680

joda-time使用方法相关推荐

  1. 时间处理 - Joda

    核心类 DateTime 包含日期和时间 LocalDateTime 使用本地时区的日期和时间 LocalDate 使用本地时区的日期 LocalTime 使用本地时区的时间 DateTimeForm ...

  2. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群

    作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...

  3. Java面试题大全2021版

    一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...

  4. joda jar日期处理类的学习

    转载:http://www.open-open.com/lib/view/open1348032952724.html 任何企业应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点, ...

  5. Java-小技巧-004-jdk时间,jdk8时间,joda,calendar,获取当前时间前一周、前一月、前一年的时间...

    1.推荐使用java8 localdate等 线程安全 支持较好 地址 2.joda 一.简述 查看SampleDateFormat源码,叙述有: * Date formats are not syn ...

  6. java joda 获取utc时间_java – 使用JodaTime以毫秒为单位的UTC到本地时间

    我试图使用Jodatime显示特定时间段内的交易. 我们的服务器要求开始日期和结束日期为UTC(这可能是显而易见的).因此,围绕它们的任何业务逻辑都使用DateTime对象,时区设置为DateTime ...

  7. Java日期及时间库插件 -- Joda Time.

    转载自   Java日期及时间库插件 -- Joda Time. 来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用 ...

  8. java中算两个时间内的秒数_java – Joda Time – 计算两个日期之间的秒数会引发异常....

    我使用以下代码来计算两个日期之间的秒数差异: long secondsBetween = (Seconds.secondsBetween(new LocalDate("1901-01-01& ...

  9. 新的时间处理工具joda

    时间处理是在项目中经常用到的,时间处理一共三个, new Date().getYear(); 该方式已经弃用,第二种: calendar,用的最多,但实际用起来并不方便,现在推荐的是第三种: 使用jo ...

  10. joda DateTimeFormatter simpleDateFormat

    转自:  https://www.ibm.com/developerworks/cn/java/j-jodatime.html 今天看到一个大牛说道simpleDateFormat不是线程安全的,要换 ...

最新文章

  1. 模拟红绿灯交替指示编程思路
  2. 白盒测试有哪些方法_QA测试开发常考的面试题+答案汇总(持续更新)
  3. 三行代码实现快速排序
  4. NOI[2001]食物链
  5. IDEA 项目结构旁边出现 0%classes,0% lines covered
  6. P2048-[NOI2010]超级钢琴【RMQ,堆】
  7. 5G NR 链路自适应 Link Adaptation
  8. NOI 2018 归程 (Kruskal重构树)
  9. LeetCode199. Binary Tree Right Side View
  10. struts2与json的整合
  11. layui和js实现二级联动
  12. WPA2 Key Reinstallation 漏洞
  13. 10套高质量Linux教程,放在百度网盘了
  14. 公园智慧路灯解决方案
  15. 高数教材班复习Hint(3.1-3.6)
  16. matlab拟合反比例函数,y与x的函数关系式图像 已知变量y与x之间的函数
  17. 那些年我们踩过的Hive坑
  18. 用递归方式写斐布拉契数列的坏处
  19. 在mac上用文本编辑器写python_Mac电脑上实用的文本编辑器BBEdit
  20. 计算机科学职业位置,计算机专业的职业生涯规划范文

热门文章

  1. ARM开发板移植lsusb命令
  2. 023-zabbix性能优化中的几个中肯建议
  3. 你可能不知道的css-doodle
  4. UE4-ReplicationGraph源码分析-基础
  5. 如何打造特色小镇的夜游可玩性
  6. DVB误码率手持式场强仪科普说明
  7. 笔记本二合一计算机,【二合一笔记本电脑】二合一笔记本电脑缺陷_二合一笔记本电脑测评...
  8. Google分布式系统三大论文(二)Bigtable: A Distributed Storage System for Structured Data
  9. 写的基于http协议的QQ聊天机器人
  10. 【css】vertical-align默认值baseline