Java常见对象Calendar类-35-为什么Calendar能代替Date类的许多方法

       之前我们学了Date类和SimpleDateFormat类,这两个都是时间和时间日期格式化操作的类。这篇学习Calendar类,叫日历类,而且是一个抽象类。在学习Date类的时候,看到API标注很多类已经过时了,这些过时的方法就是由Calendar类来替代的。

 

1.API阅读和基本使用

 

     在JDK API 1.6文档,搜索打开Calendar类,可以找到它有一个子类,叫GregorianCalendar,中文意思是格林威治日历。实际上在使用Caleandar类是通过父类引用指向了子类对象。API文档告诉了我们如何使用Calendar类。

package otherclass;
import java.util.Calendar;
public class Demo1_Calendar {
   public static void main(String[] args) {
     Calendar c = Calendar.getInstance();  //父类引用指向子类对象
     System.out.println(c);
   }
}

打印结果:

java.util.GregorianCalendar[time=1524636399602,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=3,WEEK_OF_YEAR=17,WEEK_OF_MONTH=4,DAY_OF_MONTH=25,DAY_OF_YEAR=115,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=6,SECOND=39,MILLISECOND=602,ZONE_OFFSET=28800000,DST_OFFSET=0]

       打印一长串的日期,时间信息。很不友好,有时候我们只需要这些字段里面的一部分字段的值就可以,所有,下面学习一个常用的根据字段获取值的方法来实现我们的目的。

 

2.成员方法get(filed)

 

下面代码主要是练习get(filed)方法的使用和拼接成一个符合我们习惯的日期格式输出。

package otherclass;
import java.util.Calendar;

public class Demo1_Calendar {

   public static void main(String[] args) {

     Calendar c = Calendar.getInstance();  //父类引用指向子类对象
     //获取年份
     System.out.println(c.get(Calendar.YEAR));
     //获取月份
     System.out.println(c.get(Calendar.MONTH));  //注意这里月份是从0表示1月,所以输出3表示是4月份
     //获取天
     System.out.println(c.get(Calendar.DAY_OF_MONTH));
     //获取星期几
     System.out.println(c.get(Calendar.DAY_OF_WEEK)); //美国那边把周日作为这个星期的第一天
     System.out.println("-------------------------");

     // 下面来拼接成一个我们看得习惯的时间,日期格式

     System.out.println(c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"

     +c.get(Calendar.DAY_OF_MONTH)+"日 "+getWeek(c.get(Calendar.DAY_OF_WEEK)));

   }

   /*

    * 写一个返回符合中国人习惯的星期几的方法

    */

   publicstatic String getWeek(int week) {

     String[] arr = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

     // 注意上面数组索引对应的星期,1表示星期日,索引0空着,因为Calendar.get(Calendar.DAY_OF_WEEK)的范围是1到7

     return arr[week];

   }

}

输出:

2018

3

25

4

-------------------------

2018年4月25日星期三

      有时候,我们需要限制时间日期字符串的长度,也就是说,我们需要时间日期都是“20180425的格式,有时候月份和天会是个数,所以我们需要写一个方法去前面一位补齐0.

 

package otherclass;

import java.util.Calendar;

public class Demo1_Calendar {

	public static void main(String[] args) {
		
		Calendar c = Calendar.getInstance();	//父类引用指向子类对象
		
		// 下面来拼接成一个我们看得习惯的时间,日期格式
		System.out.println(c.get(Calendar.YEAR)+"年"+(getNumber(c.get(Calendar.MONTH)+1))+"月"
		+getNumber(c.get(Calendar.DAY_OF_MONTH))+"日 "+getNumber(c.get(Calendar.HOUR_OF_DAY))+ ":"
		+getNumber(c.get(Calendar.MINUTE))+ ":"+getNumber(c.get(Calendar.SECOND))+ " "+
		getWeek(c.get(Calendar.DAY_OF_WEEK)));
		
	}
	
	/*
	 * 写一个返回符合中国人习惯的星期几的方法
	 */
	public static String getWeek(int week) {
		String[] arr = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
		// 注意上面数组索引对应的星期,1表示星期日,索引0空着,因为Calendar.get(Calendar.DAY_OF_WEEK)的范围是1到7
		return arr[week];
	}
	
	/*
	 * 月份,天和时分秒补齐0
	 */
	public static String getNumber(int num) {
		
		return (num > 9)? "" + num : "0" + num;
	}
}

输出:

2018年04月25日 15:39:03 星期三

看04月和03秒确实产生了补齐0的效果。

 

你可能感兴趣的:(Java常见对象Calendar类-35-为什么Calendar能代替Date类的许多方法)