Java中常见的日期操作(取值、转换、加减、比较)
Java的开发过程中免不了与Date类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK版本1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿。当然,我只提供了可行的解决方案,并不保证是最佳实践,欢迎讨论。
1.日期取值
在旧版本JDK的时代,有不少代码中日期取值利用了java.util.Date类,但是由于Date类不便于实现国际化,其实从JDK1.1开始,就更推荐使用java.util.Calendar类进行时间和日期方面的处理。这里便不介绍Date类的操作,让我们直奔主题吧,如何利用Calendar类取得现在的日期时间。
由于Calendar的构造器方法被protected修饰,所以我们会通过API中提供的getInstance方法来创建Calendar对象。
//有多个重载方法创建Calendar对象 Calendarnow=Calendar.getInstance();//默认 //指定时区和地区,也可以只输入其中一个参数 Calendarnow=Calendar.getInstance(timeZone,locale);
然后我们就可以通过该对象取得当前的各种时间参数了。
intyear=now.get(Calendar.YEAR);//,当前年份 intmonth=now.get(Calendar.MONTH)+;//,当前月,注意加 intday=now.get(Calendar.DATE);//,当前日Datedate=now.getTime();//直接取得一个Date类型的日期
要取得其他类型的时间数据仅需修改now.get()内的参数,除了以上三种参数,其他常用参数如下:
•Calendar.DAY_OF_MONTH:日期,和Calendar.DATE相同
•Calendar.HOUR:12小时制的小时数
•Calendar.HOUR_OF_DAY:24小时制的小时数
•Calendar.MINUTE:分钟
•Calendar.SECOND:秒
•Calendar.DAY_OF_WEEK:周几
除了取得时间数据,我们也可以通过Calendar对象设置各种时间参数。
//只设定某个字段的值 //publicfinalvoidset(intfield,intvalue) now.set(Calendar.YEAR,); //设定年月日或者年月日时分或年月日时分秒 //publicfinalvoidset(intyear,intmonth,intdate[,inthourOfDay,intminute,intsecond]) now.set(,,[,,,]); //直接传入一个Date类型的日期 //publicfinalvoidsetTime(Datedate) now.set(date);
注意:
•当设置了时间参数后,其他相关的数值都会重新计算,例如当你把日期设为11号后,周几就会作对应变化。
•获得的月份加1才是实际月份。
•在Calendar类中,周日是1,周一是2,以此类推。
2.日期转换
聊完日期取值,接下来聊聊日期转换,转换一般是Date型日期与String型字符串之间的相互转换,我主要利用java.text.SimpleDateFormat进行转换操作。
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); try{ //日期转字符串 Calendarcalendar=Calendar.getInstance(); Datedate=calendar.getTime(); StringdateStringParse=sdf.format(date); //字符串转日期 StringdateString="--::"; DatedateParse=sdf.parse(dateString); }catch(ParseExceptione){ e.printStackTrace(); }
注意:
•创建SimpleDateFormat对象时必须指定转换格式。
•转换格式区分大小写,yyyy代表年份,MM代表月份,dd代表日期,HH代表24进制的小时,hh代表12进制的小时,mm代表分钟,ss代表秒。
3.日期加减
通常来说,我们会对日期做两种加减操作:
•以某个日期为基准,计算其几天前/后、几年前/后,或者其他时间单位前后的日期
//根据现在时间计算 Calendarnow=Calendar.getInstance(); now.add(Calendar.YEAR,);//现在时间的年后 now.add(Calendar.YEAR,-);//现在时间的年前 //根据某个特定的时间date(Date型)计算 CalendarspecialDate=Calendar.getInstance(); specialDate.setTime(date);//注意在此处将specialDate的值改为特定日期 specialDate.add(Calendar.YEAR,);//特定时间的年后 specialDate.add(Calendar.YEAR,-);//特定时间的年前
注意使用了Calendar对象的add方法,可以更改Calendar.YEAR为任意时间单位字段,完成各种时间单位下的日期计算。
•计算两个时间的间隔,例如计算2016年1月1日距离现在有多少天。
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); StringdateString="--::"; Calendarcalendar=Calendar.getInstance(); longnowDate=calendar.getTime().getTime();//Date.getTime()获得毫秒型日期 try{ longspecialDate=sdf.parse(dateString).getTime(); longbetweenDate=(specialDate-nowDate)/(***);//计算间隔多少天,则除以毫秒到天的转换公式 System.out.print(betweenDate); }catch(ParseExceptione){ e.printStackTrace(); }
4.日期比较
翻看自己以前的代码,发现每当进行日期比较的操作时,总会先将日期转为“yyyyMMdd”格式的字符串,再将字符串转为数值,然后比较数值大小。哈哈,一个简单的比较操作,却要写十几行代码,有点目不忍视。现在得说说正确地日期比较姿势是怎么样的。
日期比较一般有两种方法,对于java.util.Date或者java.util.Calendar都是通用的。一种是通过after()与before()方法进行比较,一种是通过compareTo()方法进行比较。
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); StringdateString_01="2016-01-0111:11:11"; StringdateString_02="2016-01-0211:11:11"; try{ Datedate_01=sdf.parse(dateString_01); Datedate_02=sdf.parse(dateString_02); System.out.println(date_01.before(date_02));//true,当date_01小于date_02时,为true,否则为false System.out.println(date_02.after(date_01));//true,当date_02大于date_01时,为true,否则为false System.out.println(date_01.compareTo(date_02));//-1,当date_01小于date_02时,为-1 System.out.println(date_02.compareTo(date_01));//1,当date_02大于date_01时,为1 System.out.println(date_02.compareTo(date_02));//0,当两个日期相等时,为0 }catch(ParseExceptione){ e.printStackTrace(); }
以上是本文给大家介绍的Java中常见的日期操作(取值、转换、加减、比较)的全部叙述,希望大家喜欢。