你的位置:首页 > Java教程

[Java教程]jodaTime 的使用说明


1 <dependency>2    <groupId>joda-time</groupId>3    <artifactId>joda-time</artifactId>4    <version>2.6</version>5 </dependency>

 

 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     }