概念
java.util.Calendar ==> 是日历类, 在Date后出现,替换掉许多Date方法
-->该类将所有可能用到的时间信息封装为
静态成员变量
日历类-->方便获取各个时间属性
获取方式
Calendar为抽象类---->在创建对象时,
并非直接创建
,而是
通过静态方法创建
.返回子类对象
--> static Calendar getInstance();==>使用默认时区和环境获得一个日历对象(Calendar的子类对象)
代码例:
Calendar c = Calendar.getInstance()
//直接返回子类对象
常用方法:
public int
get
(int field) ==> 返回指定日历字段的值
get(年):获取年的值
get(月):获取月的值
get(日):获取日的值
代码例:
Calendar c = Calendar.getInstance();//获取Calendar对象
int year = c.get(1);
//1表示年/2表示月
//如果每次get都传递数字,会大大影响开发效率即程序阅读
//因此可以使用Calendar中的静态常量表示这些数字
//
Calendar提供了很多静态常量,对应一个数字,见名知意
//
Calendar中月份由0开始
int day = c.get(Calendar.DAY_OF_YEAR)
public void
set
(int field, int value) ==> 将给定日历字段设置为给定值
field --> 给哪个字段设置
value--> 设置什么值
代码例:
Calendar c = Calendar.getInstance();//==>获取Calendar对象
//调用set方法,重新设置值
c.set(Calendar.YEAR,2000);//==>Calendar.YEAR.静态常量
public abstract void
add
(int field , int amount) ==> 根据日历的规则,为给定的日历字段添加或减去指定的时间量
field:--> 给哪个字段进行计算
amount--> 对字段
+-指定值
+在原来数据基础上,+此数据
-在原来数据基础上,-此数据
代码例:
Calendar c = Calendar.getInstance;//==>获取对象
c.add(Calendar.YEAR,2);==>2015-->2017
c.add(Calendar.YEAR,-2)==>2015-->2013
void roll(int field , int amout) ==> 加上的value超过了该字段所能表示的最大范围后,也不会向上一个字段进位
public Date
getTime
() ==> 返回一个表示此Calendar时间值的
Date对象
代码例:
Calendar c = Calendar.getInsatance();
Date dat = c.getTime();
void set(int field , int value) ==> 将给定的日历字段设置为给定值
void set(int year , int month , int date) ==> 设置Calendar对象年/月/日三个字段的值
void set(int year, int date , int hourOfDay, int minute , int second) ==> 设置Calendar对象的年.月.日.时.分.秒六个字段的值
--(field是Calendar静态属性,Clendar.YEAR/Calendar.MONTH/Clendar.DAY_...)--
方法
get/set ==> 获取指定字段的值/设置指定字段的值
add ==> 对指定日历字段的值进行加减操作, 如果第二个参数为整数,则加上偏移量,反之减
getTime ==> 拿到对应的Date对象
tips ==> 西方星期的开始为周日,中国为周一
Calendar类中, 月份的表示是以0-11代表1-12月
日期具有大小关系,,时间靠后,时间越大
roll和add区别
add:当被修改的字段超出它允许的范围时,会发生进位(上一级)
如果下一级字段也需要改变,name该字段会修正到最小变化的值
roll:当被修改的字段超出它允许的范围时,上一级字段不会增大
Calendar容错性
setLenient(false) ==> 可关闭Calendar容错性,让它进行严格的参数检查
-->Calendar两种解释日历字段的模式:
--> 1.lenient,可接受超出允许范围的值
2.non-lenient若超出允许范围,则抛出异常
set方法延迟修改
set(f , value) --> 方法将日历字段f更改为value, 并且, 设置一个内部成员变量, 以指示日历字段f已经被更改,
--> 日历字段立即更改,但Calendar所代表的时间却不会立即修改,知道下次调用方法时,才重新计算日历的时间
TimeZone(时区)
--> 1.程序中默认实现是以格林威治时间为标准的,产生8小时的时间差
2.TimeZone设置程序中时间所属的时区
3.抽象类,不能调用构造器创建实例,但可调用静态方法:getDafault(获取运行机器默认时区,默认时区可以通过修改操作系统相关配置来调整)或getTimeZone(根据时区ID获取对应时区)得到TimeZone实例
获取时区相关信息
1.static String[] getAvailabledIDs() ==> 获取java支持的所有时区
2.static TimeZone getDarault() ==> 默认时区
3.String getDisplayName() ==> 获取对象时区名称
4.String getID() ==> 获取该时区ID
5.static TimeZone getTimeZone(String ID) ==> 获取指定ID对应的TZ对象
求2018/02/14是星期几?
public class Test06_Calendar {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR,2018);
c.set(Calendar.MONTH,1);
c.set(Calendar.DATE,14);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int date = c.get(Calendar.DATE);
int i = c.get(Calendar.DAY_OF_WEEK);
char week = getWeek(i);
System.out.println(month);
System.out.println(week);
}
public static char getWeek(int a){
char[] c = {' ','日','一','二','三','四','五','六'};//迎合底层源码
return c[a];
}
}