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
1 Joda-Time 2 3 Home:http://joda-time.sourceforge.net/ 4 5 JavaDoc:http://joda-time.sourceforge.net/apidocs/index.html 6 7 直接看代码,这是在网上和根据API整理的一些例子,使用时看例子就可以了 8 9 package com.yan.joda; 10 11 import java.util.Calendar; 12 import java.util.Date; 13 import java.util.Locale; 14 import org.joda.time.DateTime; 15 import org.joda.time.Days; 16 import org.joda.time.LocalDate; 17 import org.joda.time.format.DateTimeFormat; 18 import org.joda.time.format.DateTimeFormatter; 19 20 public class JodaTest { 21 22 public static void main(String[] args) { 23 //初始化时间 24 DateTime dateTime=new DateTime(2012, 12, 13, 18, 23,55); 25 26 // 年,月,日,时,分,秒,毫秒 27 DateTime dt3 = new DateTime(2011, 2, 13, 10, 30, 50, 333);// 2010年2月13日10点30分50秒333毫秒 28 29 //下面就是按照一点的格式输出时间 30 String str2 = dateTime.toString("MM/dd/yyyy hh:mm:ss.SSSa"); 31 String str3 = dateTime.toString("dd-MM-yyyy HH:mm:ss"); 32 String str4 = dateTime.toString("EEEE dd MMMM, yyyy HH:mm:ssa"); 33 String str5 = dateTime.toString("MM/dd/yyyy HH:mm ZZZZ"); 34 String str6 = dateTime.toString("MM/dd/yyyy HH:mm Z"); 35 36 DateTimeFormatter format = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss"); 37 //时间解析 38 DateTime dateTime2 = DateTime.parse("2012-12-21 23:22:45", format); 39 40 //时间格式化,输出==> 2012/12/21 23:22:45 Fri 41 String string_u = dateTime2.toString("yyyy/MM/dd HH:mm:ss EE"); 42 System.out.println(string_u); 43 44 //格式化带Locale,输出==> 2012年12月21日 23:22:45 星期五 45 String string_c = dateTime2.toString("yyyy年MM月dd日 HH:mm:ss EE",Locale.CHINESE); 46 System.out.println(string_c); 47 48 DateTime dt1 = new DateTime();// 取得当前时间 49 50 // 根据指定格式,将时间字符串转换成DateTime对象,这里的格式和上面的输出格式是一样的 51 DateTime dt2 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("2012-12-26 03:27:39"); 52 53 //计算两个日期间隔的天数 54 LocalDate start=new LocalDate(2012, 12,14); 55 LocalDate end=new LocalDate(2013, 01, 15); 56 int days = Days.daysBetween(start, end).getDays(); 57 58 //计算两个日期间隔的小时数,分钟数,秒数 59 60 //增加日期 61 DateTime dateTime1 = DateTime.parse("2012-12-03"); 62 dateTime1 = dateTime1.plusDays(30); 63 dateTime1 = dateTime1.plusHours(3); 64 dateTime1 = dateTime1.plusMinutes(3); 65 dateTime1 = dateTime1.plusMonths(2); 66 dateTime1 = dateTime1.plusSeconds(4); 67 dateTime1 = dateTime1.plusWeeks(5); 68 dateTime1 = dateTime1.plusYears(3); 69 70 // Joda-time 各种操作..... 71 dateTime = dateTime.plusDays(1) // 增加天 72 .plusYears(1)// 增加年 73 .plusMonths(1)// 增加月 74 .plusWeeks(1)// 增加星期 75 .minusMillis(1)// 减分钟 76 .minusHours(1)// 减小时 77 .minusSeconds(1);// 减秒数 78 .minusMonths(2);// 减月 79 //判断是否闰月 80 DateTime dt4 = new DateTime(); 81 org.joda.time.DateTime.Property month = dt4.monthOfYear(); 82 System.out.println("是否闰月:" + month.isLeap()); 83 84 //取得 3秒前的时间 85 DateTime dt5 = dateTime1.secondOfMinute().addToCopy(-3); 86 dateTime1.getSecondOfMinute();// 得到整分钟后,过的秒钟数 87 dateTime1.getSecondOfDay();// 得到整天后,过的秒钟数 88 dateTime1.secondOfMinute();// 得到分钟对象,例如做闰年判断等使用 89 90 // DateTime与java.util.Date对象,当前系统TimeMillis转换 91 DateTime dt6 = new DateTime(new Date()); 92 Date date = dateTime1.toDate(); 93 DateTime dt7 = new DateTime(System.currentTimeMillis()); 94 dateTime1.getMillis(); 95 96 Calendar calendar = Calendar.getInstance(); 97 dateTime = new DateTime(calendar); 98 } 99 } 100 101 102 103 下面是一个小例子用来计算小宝宝从出生到现在总共的天数小时数等,首先用jdk的类去做,不用joda,然后再用joda去做,以做比较 104 105 用jdk做的例子,这里算的从出生到现在的时间间隔是准确的,如果是输入的某天来算的话就不是很准确,多一秒就算一天。可以看到用jdk去做的话,要写的代码还是挺繁琐的。 106 107 import java.text.SimpleDateFormat; 108 import java.util.Calendar; 109 import java.util.Date; 110 import java.util.Scanner; 111 112 public class CalBaby { 113 private final static String birthday = "2012-3-10 08:20:55"; 114 /** 115 * @param args 116 */ 117 public static void main(String[] args) { 118 while(true){ 119 String format1 = "yyyy-MM-dd"; 120 String format2 = "yyyy-MM-dd HH:mm:ss"; 121 Scanner s = new Scanner(System.in); 122 System.out.println("########################################"); 123 cutTwoDateToDay(convertToDate1(birthday,format2),new Date(),false); 124 System.out.println("请选择操作"); 125 System.out.println("请输入日期(格式例如:2012-11-08)"); 126 System.out.println("########################################"); 127 String endDateStr = s.nextLine(); 128 Date endDate = convertToDate1(endDateStr,format1); 129 if(endDate == null){ 130 System.out.println("输入格式错误!请重新输入."); 131 continue; 132 } 133 boolean inputFlag = true; 134 cutTwoDateToDay(convertToDate1(birthday,format2),endDate,inputFlag); 135 } 136 137 } 138 139 /** 140 * 计算两个日期之间的差距天数 141 * 142 * @param a 143 * @param b 144 * @return 145 */ 146 public static void cutTwoDateToDay(Date beginDate, Date endDate,boolean inputFlag) { 147 Calendar calendar = Calendar.getInstance(); 148 long intervalDays = 0; 149 calendar.setTime(beginDate); 150 long begin = calendar.getTimeInMillis(); 151 calendar.setTime(endDate); 152 long end = calendar.getTimeInMillis(); 153 long totalM = end - begin; 154 System.out.println((end -begin)); 155 System.out.println(24*60*60*1000); 156 intervalDays = totalM /(24*60*60*1000); 157 long intervalHours = (totalM - (intervalDays*24*60*60*1000))/(60*60*1000); 158 long intervalMin = (totalM - intervalDays * (24*60*60*1000) - intervalHours*60*60*1000)/(60*1000); 159 if(inputFlag){ 160 if(totalM > 0L && totalM %(24*60*60*1000) > 0L){ 161 intervalDays = intervalDays + 1; 162 } 163 System.out.println("宝宝从出生到"+formatDate(endDate,"yyyy-MM-dd")+"已经"+intervalDays+"天了"); 164 }else{ 165 System.out.println("宝宝来到这个世界已经"+intervalDays+"天"+intervalHours+"小时"+intervalMin+"分钟了"); 166 } 167 168 } 169 170 /** 171 * 将字符串日期转换为Date yyyy-MM-dd HH:mm:ss yyyy-MM-dd 172 * 173 * @param s 174 * @return 175 */ 176 public static Date convertToDate1(String s,String format) { 177 178 if (s == null) { 179 return null; 180 } 181 try { 182 SimpleDateFormat df = new SimpleDateFormat(format); 183 return df.parse(s); 184 } catch (Exception e) { 185 return null; 186 } 187 } 188 189 public static String formatDate(Date date, String strType) 190 { 191 if (date == null) 192 { 193 return null; 194 } 195 196 SimpleDateFormat sdf = new SimpleDateFormat(strType); 197 try 198 { 199 return sdf.format(date); 200 } 201 catch (Exception e) 202 { 203 return null; 204 } 205 } 206 } 207 208 209 210 下面是用joda来做,用这个来做就简单的多了,而且也很准确。 211 212 Java代码 收藏代码 213 214 import java.util.Scanner; 215 import org.joda.time.DateTime; 216 import org.joda.time.Days; 217 import org.joda.time.LocalDate; 218 import org.joda.time.format.DateTimeFormat; 219 import org.joda.time.format.DateTimeFormatter; 220 221 public class CalBabyJoda { 222 223 private final static String birthday = "2012-3-10 08:20:55"; 224 225 public static void main(String[] args) { 226 while(true){ 227 Scanner s = new Scanner(System.in); 228 System.out.println("########################################"); 229 DateTimeFormatter format1 = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss"); 230 DateTimeFormatter format2 = DateTimeFormat .forPattern("yyyy-MM-dd"); 231 DateTime startDateTime = DateTime.parse(birthday, format1); 232 System.out.println("宝宝来到这个世界已经"); 233 calDateToDay(startDateTime,new DateTime()); 234 System.out.println("如选择其它日期请输入(格式例如:2012-11-08 14:24:54或着2012-11-08)"); 235 System.out.println("########################################"); 236 String endDate = s.nextLine(); 237 DateTime endDateTime = null; 238 try{ 239 endDateTime = DateTime.parse(endDate,format1); 240 }catch(Exception e){ 241 try{ 242 endDateTime = DateTime.parse(endDate,format2); 243 }catch(Exception e1){ 244 System.out.println("输入格式错误!请重新输入."); 245 continue; 246 } 247 } 248 System.out.println("宝宝从出生到" + endDateTime.toString("yyyy-MM-dd HH:mm:ss") + "已经"); 249 calDateToDay(startDateTime,endDateTime); 250 } 251 } 252 253 public static void calDateToDay(DateTime startDateTime,DateTime endDateTime){ 254 255 LocalDate start=new LocalDate(startDateTime); 256 LocalDate end=new LocalDate(endDateTime); 257 Days days = Days.daysBetween(start, end); 258 int intervalDays = days.getDays(); 259 int intervalHours = endDateTime.getHourOfDay() - startDateTime.getHourOfDay(); 260 int intervalMinutes = endDateTime.getMinuteOfHour() - startDateTime.getMinuteOfHour(); 261 int intervalSeconds = endDateTime.getSecondOfMinute() - startDateTime.getSecondOfMinute(); 262 263 264 if(intervalSeconds < 0){ 265 intervalMinutes = intervalMinutes -1; 266 intervalSeconds = 60 + intervalSeconds; 267 } 268 269 if(intervalMinutes < 0){ 270 intervalHours = intervalHours -1; 271 intervalMinutes = 60 + intervalMinutes; 272 } 273 274 if(intervalHours < 0){ 275 intervalDays = intervalDays -1; 276 intervalHours = 24 + intervalHours; 277 } 278 279 System.out.println(intervalDays + "天" + intervalHours + 280 "小时" + intervalMinutes + "分钟" + intervalSeconds + "秒"); 281 System.out.println("############################"); 282 } 283 284 }