JavaSE进阶

10.5.4 java.util.Calendar

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

人们对于时间的认识是:某年某月某日,这样的日期概念。计算机是long类型的数字。通过Calendar在二者之间搭起桥梁。而且Calendar提供了很多关于日期时间计算的方法。

GregorianCalendar(公历)是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

注意:

月份:一月是0,二月是1,以此类推,12月是11

星期:周日是1,周二是2,。。。。周六是7

//默认语言环境的时间(时区)

Calendar c = new GregorianCalendar();

/*

 * java.util.GregorianCalendar[

 * time=1480667849712,

 * 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=2016,

 * MONTH=11,

 * WEEK_OF_YEAR=49,//本年第49周

 * WEEK_OF_MONTH=1,//本月第1周

 * DAY_OF_MONTH=2,

 * DAY_OF_YEAR=337,//本年第337天

 * DAY_OF_WEEK=6,

 * DAY_OF_WEEK_IN_MONTH=1,

 * AM_PM=1, //下午

 * HOUR=4,

 * HOUR_OF_DAY=16,  //HOUR是12小时制, HOUR_OF_DAY是24小时制

 * MINUTE=37,

 * SECOND=29,

 * MILLISECOND=712,

 * ZONE_OFFSET=28800000,

 * DST_OFFSET=0]

 */

public static void main(String[] args) {

//默认语言环境的时间(时区)

Calendar c = new GregorianCalendar();

int year=c.get(Calendar.YEAR);

int month=c.get(Calendar.MONTH);

int date=c.get(Calendar.DAY_OF_MONTH);

int hour=c.get(Calendar.HOUR_OF_DAY);

int minute=c.get(Calendar.MINUTE);

int second=c.get(Calendar.SECOND);

int mill=c.get(Calendar.MILLISECOND);

int week=c.get(Calendar.DAY_OF_WEEK);

StringBuffer dateStr=new StringBuffer();

dateStr.append(year).append("年");

dateStr.append(month+1).append("月");

dateStr.append(date).append("日").append("  ");

dateStr.append(hour).append("时");

dateStr.append(minute).append("分");

dateStr.append(second).append("秒");

dateStr.append(mill).append("毫秒").append("  ");

String[] weeks={"日","一","二","","四","五","六"};

dateStr.append("星期").append(weeks[week-1]);

System.out.println(dateStr);

}

public static void main(String[] args) {

Calendar c = new GregorianCalendar(2015, 6, 13);

// c.set(2016, Calendar.DECEMBER, 4, 12, 12, 0);

// c.setTime(new Date());

//15天之后

//c.add(Calendar.DATE, 15);

//2个月之前

//c.add(Calendar.DAY_OF_MONTH, -2);

//12小时之后

c.add(Calendar.HOUR, 12);

Date time = c.getTime();//转成日期

System.out.println(time);

}

public static Calendar getInstance()使用默认时区和语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了默认时区和默认语言环境。

public static Calendar getInstance(TimeZone zone, Locale aLocale)使用指定时区和语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了给定的时区和给定的语言环境。

public static void main(String[] args) {

Calendar c = Calendar.getInstance();

System.out.println(c);

Calendar c2 = Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai"), Locale.CHINA);

System.out.println(c2);

Calendar c3 = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"), Locale.US);

System.out.println(c3);

}