在日常开发工作中,我们经常需要用到日期相关类(包括已经处理过日期的日期类),所以特地整理了一篇关于日期相关类的文章,希望可以可以帮助大家。一、日期类介绍在Java中,对日期进行操作的类主要有以下类:工具类属于包继承关系,实现了接口Date类java.util包,需要默认导入继承ObjectSerializable、Cloneable、ComparableSimpleDateFormat类java.text包,导入包需要继承DateFormatSerializable、CloneableCalendar类java.util包,导入包默认需要继承ObjectSerializable、Cloneable、Comparable。二、Date类是最基本的日期类,Date类有四个相关的同名类。这四个类属于不同的包。这里我们讨论的是位于java.util包下的Date类。1.构造方法Date类有6个构造方法,其中带@Deprecated注解的后5个已经废弃(不推荐),主要使用前2个构造方法。既然有构造方法。其实我们可以通过new关键字实例化对象来获取时间。通过源码我们可以发现,无参构造方法其实是使用了System.currentTimeMillis()方法来获取当前系统时间,然后通过方法调用将这个时间传递给long类型的参数化方法赋值给private成员变量。publicDate(){this(System.currentTimeMillis());ss="dp-xml">ss="alt">//返回当前系统时间与计算机元年毫秒值的差值()//computer元年:1970-1-100:00:00ss="alt">//中国时差8小时longss="attribute">l=ss="attribute-value">System.currentTimeMillis();ss="alt">System.out.println(l);//1587349600847我们可以看到输出Date输出的格式是一种很奇怪的格式,不应该是hashCode码吗?其实不是,因为Date类重写了Object()方法的toString,然后日期的格式按照美国人的格式命名,所以有点奇怪。ss="dp-xml">ss="alt">//输出格式为格林威治标准时间格式Dates="attribute">date=ss="attribute-value">newDate();ss="alt">System.out.println(date);//MonApr2010:33:49CST2020Datess="attribute">time=ss="attribute-value">newDate("");2.常用方法Date类中的大部分方法都是过时的,不推荐使用,所以介绍几个常用的before()方法判断一个时间是否在另一个时间之前,返回值为布尔类型。ss="dp-xml">ss="alt">Dates="attribute">date1=ss="attribute-value">newDate(1587350029179L);//上一次dates="attribute">date2=ss="attribute-value">newDate(1587350029192L);//落后时间ss="alt">booleanss="attribute">before=ss="attribute-value">date1.before(date2);//判断是否时间ofdate1beforedate2System.out.println(before);//trueafter()方法,判断一个时间是否在另一个时间之后,返回值为boolean类型。ss="dp-xml">ss="alt">Dates="attribute">date1=ss="attribute-value">newDate(1587350029179L);//上一次dates="attribute">date2=ss="attribute-value">newDate(1587350029192L);//时间后ss="alt">booleanss="attribute">after=ss="attribute-value">date1.after(date2);//判断是否时间ofdate1Afterdate2System.out.println(after);//false3.日期格式化类—SimpleDateFormat类现在我们可以通过上面提到的日期类来操作时间,但是时间的输出格式是格林威治标准时间,时间格式很不直观也很奇怪,那么有什么办法可以把输出的时间改成我们常用的年月日时分秒的时间格式呢?答案当然是可以的,Jdk为我们提供了时间格式操作的工具类DateFormat,但是我们通过查看源码发现,如图ss="dp-xml">ss="alt">publicabstractclassDateFormatextendsFormat{}这个类其实是一个抽象类,众所周知,抽象类不能通过构造方法创建不能实例化的对象。通俗地说,他们不能做事。然后我们可以找一个抽象类的子类,然后帮我们格式化Date日期。此类是SimpleDateFormat类。1.构造方法SimpleDateFormat类有四种构造方法,如下代码所示:ss="dp-xml">ss="alt">publicSimpleDateFormat(){}ss="dp-xml">ss="alt">publicSimpleDateFormat(Stringpattern){}ss="dp-xml">ss="alt">publicSimpleDateFormat(Stringpattern,Localelocale){}ss="dp-xml">ss="alt">publicSimpleDateFormat(Stringpattern,DateFormatSymbolsformatSymbols){}下图是日期的模式,其中大写的M代表月份,小写的m代表时分秒;大写的D是一年中的第几天,小写的d是月份的第几天;大写H表示一天中的小时(0-23),小写h表示上午/下午(1-12)中的小时;大写的S表示毫秒,小写的s表示秒,各自的具体含义可以参考下图:2.常用方法format()方法按照指定的格式模式对日期进行格式化,返回一个日期字符串ss="dp-xml">ss="alt">DateFormatss="attribute">sdf1=ss="attribute-value">newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");System.out.println(sdf1.format(newDate()));//2020-04-2011:40:18parse()方法,使用给定的参数——日期字转换为时间格式的字符串,返回日期对象ss="dp-xml">ss="alt">DateFormatss="attribute">sdf1=ss="attribute-value">newSimpleDateFormat("yyyy-MM-dd");Stringss="attribute">dateStr=ss="attribute-value">"2012-10-20";ss="alt">Dates="attribute">parse=ss="attribute-value">null;try{ss="alt">ss="attribute">parse=ss="attribute-value">sdf1.parse(dateStr);System.out.println(parse);//SatOct2000:00:00CST2012ss="alt">}catch(ParseExceptione){e.printStackTrace();ss="alt">}四、Calendar类由于Date类中很多方法已经过时(JDK不建议我们使用),Date不能只对年月日进行操作,所以Calendarclass出现了,英文单词Calendar就是日历的意思。Calendar类虽然也是抽象类,但是可以通过getInstance()方法获取Calendar对象,ss="dp-xml">ss="alt">publicabstractclassCalendarimplementsSerializable,Cloneable,Comparables="tag">
