日期处理类
目录导读
Date(已过时)
Calendar(表示日历)
DateFormat(格式化日期和时间)
SimpleDateFormat(DateFormat的子类)
1.Date(过时,不推荐使用)
java.util.Date
Date类来处理日期、时间
(1)构造方法
public Date();//生成当前日期的Date
public Date(long date);//以date为时间创建Date对象,该对象是和GMT 1970年1月1日00:00之间的时间差,单位是毫秒值
(2)方法
1.返回当前时间的毫秒值:Date --> 毫秒值(long)
public long getTime(); //(与GMT1970年1月1日00:00之间的时间差)
2.毫秒值 --> Date
public Date(long date);
void setTime(long time); 设置该Date对象的时间。
2.Calendar 类
java.util.Calendar
表示日历,是个抽象类
(1)类变量(field)
YEAR
MONTH
DATE
HOUR
...
(2)方法
1.创建实例对象(是根据TimeZone、Local类来获取特定的Calendar)
(1) public static Calendar getInstance();//使用默认的TimeZone、Local
(2) static Calendar getInstance(TimeZone zone) ;//给定TimeZone
(3) static Calendar getInstance(Locale aLocale) ;// 给定Loacal
(4) public static Calendar getInstance(TimeZone zone, Locale aLocale) ; // 给定TimeZone、Loacal
2.Calendar->Date
Calendar c = Calendar.getInstance();
Date d = c.getTime();
3.Date->Calendar
由于没有Calendar/GregorianCalendar的构造器可以直接接受Date对象,只能通过Calendar的方法来接受
Calendar c = Calendar.getInstance();
c.setTime(date);
4.访问日期的方法
public int get(int field) ;//返回指定日历字段值,如年,月
public int getActualMaximum(int field) ;//返回指定日历字段可能拥有的最大值,如月份为11
public int getActualMinimum(int field) ;//返回指定日历字段可能拥有的最小值,如月份为0
public long getTimeInMillis() ;//返回该日历的毫秒值
5.修改日期
(1)abstract void add(int field, int amount) ;//根据日历规则,给指定的日历字段添加或减去指定的时间量,当被修改的字段超过它允许的范围时,会发生向上一级字段进位的现象。如果下一级字段也需要改变,那该字段(下一级的)会修正到变化最小的值。(此方法为抽象方法,实际中调用的是其子类的方法)
(2)public void roll(int field, int amount) ;//与add()的用法类似,区别在于当被修改的字段超过它允许的范围是并不会向上一级进位,但是对于修正下一级的字段的处理方式同add(),即该字段(下一级的)会修正到变化最小的值。
(3)void set(int field, int value);//对给定的日历字段设定值,注意默认情况下是不会对参数做检查(超过范围会向上一字段进位)。详情见下面的容错性
(4)void set(int year, int month, int date) //年月日
(5)void set(int year, int month, int date, int hourOfDay , int minute) //年月日时分
(6)void set(int year, int month, int date, int hourOfDay, int minute, int second) //年月日时分秒
6.calendar的容错性
Calendar有两种解释日历的模式:lenient、non-lenient
默认是处于lenient(有较好的容错性,接受超出范围的数字,会向上一级字段进位)
void setLenient(boolean lenient) ;//关闭容错性
执行setLenient(false)后,会处于non-lenient模式,则会进行严格的参数范围检查,如果超出范围就会抛出异常。
7.set()方法的延迟修改
set(f, value) 方法将f字段更改为value,虽然Calendar所代表的字段立即更改,但其代表的时间却不会立即修改直到下次调用get(), getTime(), getTimeInMillis(), add(), roll()时才会重新计算日历时间
3.DateFormat 类
java.text.DateFormat
是一个抽象类,用于表示格式化日期、时间。
(1)获得实例
public static DateFormat getInstance(); //
(2)Date <---> String
1.Date ---> String
public String format(Date date);
例如:Date d = new Date();
String s = DateFormat.getDateInstance().format(d); //2017-8-16
2.String ----> Date(要处理CaseException的异常)
Date parse(String source);
例如:String s = "2012-12-22";
DateFormat.getDateInstance().parse(s); //只能解析这种形式的字符串,不够灵活
4.SimpleDateFormat(DateFormat的子类)
java.text.SimpleDateFormat
为了克服DateFormat的不灵活性,引入了SimpleDateFormat,它可以非常灵活的格式化Date
也可以用于解析各种格式的日期和字符串。
(1)获得实例
public SimpleDateFormat(); //格式成默认的字符串, "17-8-16 下午6:39"
public SimpleDateFormat(String pattern); //格式成自定义的pattern形式的字符串,如"yyyy年MM月dd日""
(2)Date <---> String
1.Date ---> String
//该方法为其父类DateFormat的方法
public String format(Date date); //按上面的自定义格式化成String
2.String ----> Date(要处理CaseException的异常)
//该方法为其父类DateFormat的方法
public Date parse(String source); //按上面自定义的格式解析成Date