第一步:引入依赖:
1 <dependency>
2 <groupId>joda-time</groupId>
3 <artifactId>joda-time</artifactId>
4 <version>2.6</version>
5 </dependency>

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

JavaDoc:http://joda-time.sourceforge.net/apidocs/index.html
互联网上的小例子:
        package com.yan.joda;
0
1 import java.util.Calendar;
2 import java.util.Date;
3 import java.util.Locale;
4 import org.joda.time.DateTime;
5 import org.joda.time.Days;
6 import org.joda.time.LocalDate;
7 import org.joda.time.format.DateTimeFormat;
8 import org.joda.time.format.DateTimeFormatter;
9
0 public class JodaTest {
1
2 public static void main(String[] args) {
3 //初始化时间
4 DateTime dateTime=new DateTime(2012, 12, 13, 18, 23,55);
5
6 // 年,月,日,时,分,秒,毫秒
7 DateTime dt3 = new DateTime(2011, 2, 13, 10, 30, 50, 333);// 2010年2月13日10点30分50秒333毫秒
8
9 //下面就是按照一点的格式输出时间
0 String str2 = dateTime.toString("MM/dd/yyyy hh:mm:ss.SSSa");
1 String str3 = dateTime.toString("dd-MM-yyyy HH:mm:ss");
2 String str4 = dateTime.toString("EEEE dd MMMM, yyyy HH:mm:ssa");
3 String str5 = dateTime.toString("MM/dd/yyyy HH:mm ZZZZ");
4 String str6 = dateTime.toString("MM/dd/yyyy HH:mm Z");
5
6 DateTimeFormatter format = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss");
7 //时间解析
8 DateTime dateTime2 = DateTime.parse("2012-12-21 23:22:45", format);
9
0 //时间格式化,输出==> 2012/12/21 23:22:45 Fri
1 String string_u = dateTime2.toString("yyyy/MM/dd HH:mm:ss EE");
2 System.out.println(string_u);
3
4 //格式化带Locale,输出==> 2012年12月21日 23:22:45 星期五
5 String string_c = dateTime2.toString("yyyy年MM月dd日 HH:mm:ss EE",Locale.CHINESE);
6 System.out.println(string_c);
7
8 DateTime dt1 = new DateTime();// 取得当前时间
9
0 // 根据指定格式,将时间字符串转换成DateTime对象,这里的格式和上面的输出格式是一样的
1 DateTime dt2 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("2012-12-26 03:27:39");
2
3 //计算两个日期间隔的天数
4 LocalDate start=new LocalDate(2012, 12,14);
5 LocalDate end=new LocalDate(2013, 01, 15);
6 int days = Days.daysBetween(start, end).getDays();
7
8 //计算两个日期间隔的小时数,分钟数,秒数
9
0 //增加日期
1 DateTime dateTime1 = DateTime.parse("2012-12-03");
2 dateTime1 = dateTime1.plusDays(30);
3 dateTime1 = dateTime1.plusHours(3);
4 dateTime1 = dateTime1.plusMinutes(3);
5 dateTime1 = dateTime1.plusMonths(2);
6 dateTime1 = dateTime1.plusSeconds(4);
7 dateTime1 = dateTime1.plusWeeks(5);
8 dateTime1 = dateTime1.plusYears(3);
9
0 // Joda-time 各种操作.....
1 dateTime = dateTime.plusDays(1) // 增加天
2 .plusYears(1)// 增加年
3 .plusMonths(1)// 增加月
4 .plusWeeks(1)// 增加星期
5 .minusMillis(1)// 减分钟
6 .minusHours(1)// 减小时
7 .minusSeconds(1);// 减秒数
8 .minusMonths(2);// 减月
9 //判断是否闰月
0 DateTime dt4 = new DateTime();
1 org.joda.time.DateTime.Property month = dt4.monthOfYear();
2 System.out.println("是否闰月:" + month.isLeap());
3
4 //取得 3秒前的时间
5 DateTime dt5 = dateTime1.secondOfMinute().addToCopy(-3);
6 dateTime1.getSecondOfMinute();// 得到整分钟后,过的秒钟数
7 dateTime1.getSecondOfDay();// 得到整天后,过的秒钟数
8 dateTime1.secondOfMinute();// 得到分钟对象,例如做闰年判断等使用
9
0 // DateTime与java.util.Date对象,当前系统TimeMillis转换
1 DateTime dt6 = new DateTime(new Date());
2 Date date = dateTime1.toDate();
3 DateTime dt7 = new DateTime(System.currentTimeMillis());
4 dateTime1.getMillis();
5
6 Calendar calendar = Calendar.getInstance();
7 dateTime = new DateTime(calendar);
8 }
9 }
     下面是一个小例子用来计算小宝宝从出生到现在总共的天数小时数等,首先用jdk的类去做,不用joda,然后再用joda去做,以做比较
10
15 用jdk做的例子,这里算的从出生到现在的时间间隔是准确的,如果是输入的某天来算的话就不是很准确,多一秒就算一天。
可以看到用jdk去做的话,要写的代码还是挺繁琐的。
10 import java.text.SimpleDateFormat;
10 import java.util.Calendar;
19 import java.util.Date;
11 import java.util.Scanner;
11
11 public class CalBaby {
11 private final static String birthday = "2012-3-10 08:20:55";
11 /**
11 * @param args
11 */
11 public static void main(String[] args) {
11 while(true){
11 String format1 = "yyyy-MM-dd";
12 String format2 = "yyyy-MM-dd HH:mm:ss";
12 Scanner s = new Scanner(System.in);
12 System.out.println("########################################");
12 cutTwoDateToDay(convertToDate1(birthday,format2),new Date(),false);
12 System.out.println("请选择操作");
12 System.out.println("请输入日期(格式例如:2012-11-08)");
12 System.out.println("########################################");
12 String endDateStr = s.nextLine();
12 Date endDate = convertToDate1(endDateStr,format1);
12 if(endDate == null){
13 System.out.println("输入格式错误!请重新输入.");
13 continue;
13 }
13 boolean inputFlag = true;
13 cutTwoDateToDay(convertToDate1(birthday,format2),endDate,inputFlag);
15 }
16
17 }
18
39 /**
10 * 计算两个日期之间的差距天数
11 *
42 * @param a
13 * @param b
14 * @return
15 */
16 public static void cutTwoDateToDay(Date beginDate, Date endDate,boolean inputFlag) {
17 Calendar calendar = Calendar.getInstance();
18 long intervalDays = 0;
49 calendar.setTime(beginDate);
150 long begin = calendar.getTimeInMillis();
15 calendar.setTime(endDate);
12 long end = calendar.getTimeInMillis();
53 long totalM = end - begin;
54 System.out.println((end -begin));
55 System.out.println(24*60*60*1000);
56 intervalDays = totalM /(24*60*60*1000);
57 long intervalHours = (totalM - (intervalDays*24*60*60*1000))/(60*60*1000);
58 long intervalMin = (totalM - intervalDays * (24*60*60*1000) - intervalHours*60*60*1000)/(60*1000);
59 if(inputFlag){
60 if(totalM > 0L && totalM %(24*60*60*1000) > 0L){
61 intervalDays = intervalDays + 1;
62 }
63 System.out.println("宝宝从出生到"+formatDate(endDate,"yyyy-MM-dd")+"已经"+intervalDays+"天了");
14 }else{
15 System.out.println("宝宝来到这个世界已经"+intervalDays+"天"+intervalHours+"小时"+intervalMin+"分钟了");
16 }
67
18 }
19
10 /**
11 * 将字符串日期转换为Date yyyy-MM-dd HH:mm:ss yyyy-MM-dd
12 *
13 * @param s
14 * @return
75 */
76 public static Date convertToDate1(String s,String format) {
17
18 if (s == null) {
19 return null;
80 }
1 try {
82 SimpleDateFormat df = new SimpleDateFormat(format);
183 return df.parse(s);
14 } catch (Exception e) {
18 return null;
16 }
17 }
88
9 public static String formatDate(Date date, String strType)
90 {
19 if (date == null)
19 {
13 return null;
14 }
95
96 SimpleDateFormat sdf = new SimpleDateFormat(strType);
97 try
18 {
99 return sdf.format(date);
00 }
1 catch (Exception e)
20 {
20 return null;
24 }
05 }
06 }
07
08
09
0 下面是用joda来做,用这个来做就简单的多了,而且也很准确。
11
12 Java代码 收藏代码
21
21 import java.util.Scanner;
2 import org.joda.time.DateTime;
26 import org.joda.time.Days;
27 import org.joda.time.LocalDate;
28 import org.joda.time.format.DateTimeFormat;
29 import org.joda.time.format.DateTimeFormatter;
2
21 public class CalBabyJoda {
22
22 private final static String birthday = "2012-3-10 08:20:55";
22
22 public static void main(String[] args) {
22 while(true){
22 Scanner s = new Scanner(System.in);
22 System.out.println("########################################");
22 DateTimeFormatter format1 = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss");
23 DateTimeFormatter format2 = DateTimeFormat .forPattern("yyyy-MM-dd");
23 DateTime startDateTime = DateTime.parse(birthday, format1);
23 System.out.println("宝宝来到这个世界已经");
23 calDateToDay(startDateTime,new DateTime());
24 System.out.println("如选择其它日期请输入(格式例如:2012-11-08 14:24:54或着2012-11-08)");
5 System.out.println("########################################");
26 String endDate = s.nextLine();
37 DateTime endDateTime = null;
38 try{
39 endDateTime = DateTime.parse(endDate,format1);
24 }catch(Exception e){
2 try{
2 endDateTime = DateTime.parse(endDate,format2);
2 }catch(Exception e1){
24 System.out.println("输入格式错误!请重新输入.");
24 continue;
24 }
24 }
24 System.out.println("宝宝从出生到" + endDateTime.toString("yyyy-MM-dd HH:mm:ss") + "已经");
29 calDateToDay(startDateTime,endDateTime);
25 }
25 }
25
25 public static void calDateToDay(DateTime startDateTime,DateTime endDateTime){
25
25 LocalDate start=new LocalDate(startDateTime);
25 LocalDate end=new LocalDate(endDateTime);
25 Days days = Days.daysBetween(start, end);
25 int intervalDays = days.getDays();
25 int intervalHours = endDateTime.getHourOfDay() - startDateTime.getHourOfDay();
26 int intervalMinutes = endDateTime.getMinuteOfHour() - startDateTime.getMinuteOfHour();
26 int intervalSeconds = endDateTime.getSecondOfMinute() - startDateTime.getSecondOfMinute();
26
23
24 if(intervalSeconds < 0){
25 intervalMinutes = intervalMinutes -1;
26 intervalSeconds = 60 + intervalSeconds;
27 }
28
29 if(intervalMinutes < 0){
2 intervalHours = intervalHours -1;
21 intervalMinutes = 60 + intervalMinutes;
22 }
23
24 if(intervalHours < 0){
2 intervalDays = intervalDays -1;
27 intervalHours = 24 + intervalHours;
27 }
8
29 System.out.println(intervalDays + "天" + intervalHours +
20 "小时" + intervalMinutes + "分钟" + intervalSeconds + "秒");
81 System.out.println("############################");
82 }
83
4 }
个人学习笔记

浅谈jodaTime 的使用的更多相关文章

  1. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  2. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  3. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  4. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  5. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  6. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

  7. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  8. Linux特殊符号浅谈

    Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...

  9. 浅谈Angular的 $q, defer, promise

    浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00  博客园-原创精华区 原文  http://www.cnblogs.com/big-snow/ ...

随机推荐

  1. sql典例分析

    1. 条件过滤 & Having 表结构 #tab_a #tab_b 表关系 tab_a.id = tab_b.relation_id 表数据 需求 查新把tab_a的ID对应的表tab_b的 ...

  2. MongoDB之集合管理一

    最近的几篇博客都是关于MongoDB的,虽然个人感觉也没多少知识点,但没想到竟然有转载我的博客的,不管有经过我同意还是没经过我同意,说明写的应该还是有价值的,这也是我写博客的一个动力之一吧.上一博客学 ...

  3. java之Lombok

    Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法 pom依赖: <dependency ...

  4. [转]使用C#进行图像处理的几种方法

    最近做监控图像由彩色变灰处理的时候发现图像处理过程中,很慢很慢代码如下: int Height = this.picInfo.Image.Height;                    int ...

  5. 通过set赋值,与select赋值的区别

    ---通过set赋值,与select赋值的区别.declare @a int--set @a=(select count(*) from TblStudent)select @a=count(*) f ...

  6. plupload如何删除一条数据

    FilesRemoved用了发现不成功,删除图片这么重要怎能如此 看到老外提的另一个问题发现这个问题解决办法,特此备注以供不会的童鞋参考 uploader.bind('FilesAdded', fun ...

  7. 装饰器模式(Decorator Pattern)

    装饰器模式 一.什么是装饰器模式   装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装 ...

  8. Hibernate(二)持久化对象的状态

    简介 以前学习Hibernate的笔记,整理一下便发出来了,防止弄丢.有错误的话麻烦各位留言评论,感激不尽. 持久化类 Hibernate完成了从面向对象模型表示的对象至关系模型表示的数据结构的映射, ...

  9. cookie函数封装

    var cookieUtil = { setCookie :function (cname, cvalue, exdays) { var exdate = new Date(); exdate.set ...

  10. LOJ#6271. 「长乐集训 2017 Day10」生成树求和 加强版

    传送门 由于是边权三进制不进位的相加,那么可以考虑每一位的贡献 对于每一位,生成树的边权相当于是做模 \(3\) 意义下的加法 考虑最后每一种边权的生成树个数,这个可以直接用生成函数,在矩阵树求解的时 ...