程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> jodaTime 的使用說明,jodaTime使用說明

jodaTime 的使用說明,jodaTime使用說明

編輯:JAVA綜合教程

jodaTime 的使用說明,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         }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved