浅谈jodaTime 的使用
第一步:引入依赖:
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 的使用相关推荐
- 浅谈MySQL存储引擎-InnoDBMyISAM
浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...
- 【大话设计模式】——浅谈设计模式基础
初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...
- 学校计算机机房好处,浅谈学校计算机机房维护
浅谈学校计算机机房维护 现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...
- java 中的单元测试_浅谈Java 中的单元测试
单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...
- mybatis与php,浅谈mybatis中的#和$的区别
浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...
- 浅谈GCC预编译头技术
浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...
- 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)
震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...
- 浅谈几种区块链网络攻击以及防御方案之其它网络攻击
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...
- 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币 ...
最新文章
- python SSL error: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) 解决方法
- interface接口_golang 基础(Four) 接口进阶
- [概统]本科二年级 概率论与数理统计 第一讲 古典概型
- SAP实施需注意问题总结
- Java面试宝典系列之基础面试题String、变量、类与对象、集合类、SSH(三)
- 课程设计个人报告——基于ARM实验箱的捕鱼游戏的设计与实现
- 在SAP CDS view上添加扩展字段后激活,背后的实现原理
- Eclipse中执行Ant脚本出现Could not find the main class的问题及解
- 有趣!机器学习预测《守望先锋》里的赢家
- 【Python】Sklearn创建三种仿真数据集
- 1.6 编程基础之一维数组 03 计算书费 python
- java filter注入_如何在Java Filter 中注入 Service
- Spring容器创建流程(9)完成创建
- wxWidgets第三课 MSWWindowProc处理窗口消息
- Highcharts 显示图表
- WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭
- 白话空间统计三十:地统计学(2)前提假设
- 计算机模拟的实例,计算机模拟实例模拟的概念-read.ppt
- 续:~英语 1038个词根 217个后缀!
- 猿创征文|【云原生】学习云原生经验分享