java原本提供了date和Calendar用于处理日期、时间的类,包括创建日期、时间的对象。获取系统当前的日期、时间等操作。但Date不仅无法实现国际化,而且他对不同属性也使用了前后矛盾的偏移量,月份从0开始 天数从一开始,年份从1900开始的,而calendar又过于复杂。所以一般用java8全新的日期时间类。
1.Date类处理时间,在java.util包下,Date类提供六个构造方法,但有四个已经过时,会引起编译器的警告,剩下两个Data()生成一个代表当前时间的Date对象,该构造器在底层还是带哦用了System.currentTimeMillis()获得long整数的日期作为参数;Date(long date)根据指定long型的整数来生成一个Date对象,该构造器的参数表示创建的Date对象和GMT1970年1月1日00:00:00之间的时间的差,以毫秒作为计时单位。与构造器相同,Date的大部分方法也已经过时了,boolean after(Date when)测试该是日期是否在指定日期when之后,boolean before(Date when)之前,long getTime():返回时间对应的long型的整数,即从GMT1970-01-01 00:00:00到该Date对象之间的时间差,以毫秒作为计时单位。void setTime(long time)设置该Date对象的时间。
2.java提供了Calendar类来更好的处理时间和日期,Calender是一个抽象的类,它用于表示日历。Gelender类本身就是一个抽象类,不能够被实例化,提供日历类的模板,java本身提供一个GregorianCalendar类,一个代表格里高利的实例,通常我们说的公历。Calendar类提供了几个静态方法getInstance()来获取Calender的对象,Calendar也提供大量访问时间。修改时间的方法,void add(int field,int amount)根据日历的规则为给定的日历字段添加或减去指定的时间量;int get(int field)返回指定的日历字段值;int getActualMinimum(int field)返回指定的日历字段可能拥有的最小值。void rool(int field,int amount):与add方法类似,区别在与加上amount后超过该字符段能表示最大的范围时,也不会向上字符进位。void set(int field,int value)将给定的日历字段设置为给定值,void set(int year,int month,int data)设置Calendar对象的年月日三个字符段。void set(int year,int month,int date,int hour,int minute,int second)设置Calendar对象的年月日月份秒6个字符段。
3.java8专门的一个新增的java.time包,该包下有一些常用的类Clock:该类用于获取指定时间的当前的日期时间。Duration:该类代表持续的时间。Instant:代表一个具体的时刻,可以精确到纳秒。LocalDate:该类代表不带时区的时间。LocalDateTime:该类代表不带时区的日期、时间。MonthDay:该类仅表示月日。Year:该类仅表示年。YearMonth:该类仅代表年月。ZonedDatetime:该类代表一个时区化的日期、时间。ZoneId:该类代表一个时区。DayofWeek:这是一个枚举类周一到周六的枚举。Mouth:该类也是一个枚举类,定义一月到十二月的枚举值。
package com.lanou.test;import java.time.Clock;import java.time.Instant;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.ZonedDateTime;public class Demo03 { public static void main(String[] args) { // TODO Auto-generated method stub Clock clock=Clock.systemUTC(); System.out.println(clock.instant()); System.out.println(clock.millis()); System.out.println(System.currentTimeMillis()); Instant instant=Instant.now(); System.out.println(instant); LocalDate localdate=LocalDate.now(); System.out.println(localdate); LocalDateTime ldt=LocalDateTime.now(); System.out.println(ldt); ZonedDateTime zdt=ZonedDateTime.now(); System.out.println(zdt); }}