jodaTime 的使用说明

Posted 灰太郎^_^

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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         }

 

以上是关于jodaTime 的使用说明的主要内容,如果未能解决你的问题,请参考以下文章

鸿蒙开源第三方组件——日期和时间处理组件JodaTime-ohos

JodaTime 夏令时错误

如何创建或设置具有最大值的 JodaTime DateTime 对象?

jodaTime 的使用说明

Java - 使用DBUtils BeanListHandler将查询中的所有日期转换为JodaTime的DateTime

在打包期间Gradle重复文件--JodaTime的messages.properties