之前一直在用Date类,Date类是在Java.util包中,不过在jdk1.1之后该类不被推荐使用,原因是这种方式获得的时间并不能被国际化,sun公司推出新的类Calendar用来获取时间。同样Calendar类也是被封装在Java.util包中。
Calendar类是抽象类,不能被实例化,通过getInstance()获取实例,具体用法如下
Calendar ca = Calendar.getInstance();
int year = ca.get(Calendar.YEAR);
int month = ca.get(Calendar.MONTH);
int day = ca.get(Calendar.DATE);
int hour = ca.get(Calendar.HOUR_OF_DAY);
int minute = ca.get(Calendar.MINUTE);
int second = ca.get(Calendar.SECOND);
System.out.println("今天是:"+year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second);
输出结果:今天是:2016-4-28 14:49:49
如果想获得周几,我们尝试调用Calendar类的一个字段DAY_OF_WEEK,输出的结果是:7,我们并不想以数字的方式获得,如果想获得文字,可以写一个方法,方便以后调用。
public static String getWeekOfDate( ) {
String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
Calendar cal = Calendar.getInstance();
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0)
w = 0;
return weekDays[w]; }
System.out.println(getWeekOfDate(ca));
输出结果:星期六
1. 在获取月份时,Calendar.MONTH + 1 的原因
Java中的月份遵循了罗马历中的规则:当时一年中的月份数量是不固定的,第一个月是JANUARY。而Java中Calendar.MONTH返回的数值其实是当前月距离第一个月有多少个月份的数值,JANUARY在Java中返回“0”,所以我们需要+1。
2. 在获取星期几 Calendar.DAY_OF_WEEK – 1 的原因
Java中Calendar.DAY_OF_WEEK其实表示:一周中的第几天,所以他会受到
有些地区以星期日作为一周的第一天,而有些地区以星期一作为一周的第一天,这2种情况是需要区分的。
看下表的返回值
星期日为一周的第一天 | SUN | MON | TUE | WED | THU | FRI | SAT |
DAY_OF_WEEK返回值 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
星期一为一周的第一天 | MON | TUE | WED | THU | FRI | SAT | SUN |
DAY_OF_WEEK返回值 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
所以Calendar.DAY_OF_WEEK需要根据本地化设置的不同而确定是否需要 “-1”