download:Dubbo 3 深度剖析 - 透过源码认识你
packagecn.outofmemory.codes.Date;
importjava.util.Calendar;
importjava.util.Date;
publicclassCalendarDemo {
publicstaticvoidmain(String[] args) {
Calendar calendar=Calendar.getInstance();
calendar.setTime(newDate());
System.out.println("现在时刻是:"+newDate());
String year=String.valueOf(calendar.get(Calendar.YEAR));
String month=String.valueOf(calendar.get(Calendar.MONTH)+1);
String day=String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
String week=String.valueOf(calendar.get(Calendar.DAY_OF_WEEK)-1);
System.out.println("现在时刻是:"+year+"年"+month+"月"+day+"日,星期"+week);
longyear2009=calendar.getTimeInMillis();
calendar.set(1989,9,26);//这儿与真实的月份之间相差1
longyear1989=calendar.getTimeInMillis();
longdays=(year2009-year1989)/(1000*60*60*24);
System.out.println("今天和1989年10月26日相隔"+days+"天,"+"也就是说我在这个美丽的星球上现已美好的生活了"+days+"天。");
}
}
Calendar类的静态办法getInstance()能够初始化一个日历目标:
Calendar now = Calendar.getInstance();
能够运用下面三个办法把日历定到任何一个时刻:
set(intyear ,intmonth,intdate)
set(intyear ,intmonth,intdate,inthour,intminute)
set(intyear ,intmonth,intdate,inthour,intminute,intsecond)
假如想取得年份、月份、小时等信息能够运用:
Now.get(Calendar.Month) 这样的办法0表明一月,1表明二月
get(Calendar.DAY_OF_MONTH)取得这个月的第几天
get(Calendar.DAY_OF_WEEK)取得这个星期的第几天
get(Calendar.DAY_OF_YEAR)取得这个年的第几天
getTimeMillis()取得当时时刻的毫秒表明
如下是Calendar类办法简介
abstractvoidadd(intfield,intamount) 根据日历的规矩,为给定的日历字段增加或减去指定的时刻量。
booleanafter(Object when) 判别此 Calendar 表明的时刻是否在指定 Object 表明的时刻之后,回来判别结果。
booleanbefore(Object when) 判别此 Calendar 表明的时刻是否在指定 Object 表明的时刻之前,回来判别结果。
voidclear()将此 Calendar 的所日历字段值和时刻值(从历元至现在的毫秒偏移量)设置成未界说。
voidclear(intfield) 将此 Calendar 的给定日历字段值和时刻值(从历元至现在的毫秒偏移量)设置成未界说。
Object clone()创建并回来此目标的一个副本。
intcompareTo(Calendar anotherCalendar) 比较两个 Calendar 目标表明的时刻值(从历元至现在的毫秒偏移量)。
protectedvoidcomplete()填充日历字段中一切未设置的字段。
protectedabstractvoidcomputeFields()将当时毫秒时刻值 time 转换为 fields[] 中的日历字段值。
protectedabstractvoidcomputeTime()将 fields[] 中的当时日历字段值转换为毫秒时刻值 time。
booleanequals(Object obj) 将此 Calendar 与指定 Object 比较。
intget(intfield)回来给定日历字段的值。
intgetActualMaximum(intfield)给定此 Calendar 的时刻值,回来指定日历字段或许具有的最大值。
intgetActualMinimum(intfield)给定此 Calendar 的时刻值,回来指定日历字段或许具有的最小值。
staticLocale[] getAvailableLocales()回来一切言语环境的数组,此类的 getInstance 办法能够为其回来本地化的实例。
String getDisplayName(intfield,intstyle, Locale locale) 回来给定 style 和 locale 下的日历 field 值的字符串表明方式。
Map getDisplayNames(intfield,intstyle, Locale locale) 回来给定 style 和 locale 下包含日历 field 一切名称的 Map 及其相应字段值。
intgetFirstDayOfWeek()获取一星期的榜首天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。
abstractintgetGreatestMinimum(intfield)回来此 Calendar 实例给定日历字段的最高的最小值。
staticCalendar getInstance() 运用默许时区和言语环境取得一个日历。
staticCalendar getInstance(Locale aLocale) 运用默许时区和指定言语环境取得一个日历。
staticCalendar getInstance(TimeZone zone) 运用指定时区和默许言语环境取得一个日历。
staticCalendar getInstance(TimeZone zone, Locale aLocale) 运用指定时区和言语环境取得一个日历。
abstractintgetLeastMaximum(intfield) 回来此 Calendar 实例给定日历字段的最低的最大值。
abstractintgetMaximum(intfield) 回来此 Calendar 实例给定日历字段的最大值。
intgetMinimalDaysInFirstWeek()获取一年中榜首个星期所需的最少天数,例如,假如界说榜首个星期包含一年榜首个月的榜首天,则此办法将回来1。
abstractintgetMinimum(intfield) 回来此 Calendar 实例给定日历字段的最小值。
Date getTime()回来一个表明此 Calendar 时刻值(从历元至现在的毫秒偏移量)的 Date 目标。
longgetTimeInMillis()回来此 Calendar 的时刻值,以毫秒为单位。
TimeZone getTimeZone()取得时区。
inthashCode()回来该此日历的哈希码。
protectedintinternalGet(intfield)回来给定日历字段的值。
booleanisLenient()判别日期/时刻的解说是否为宽松的。
booleanisSet(intfield) 确定给定日历字段是否现已设置了一个值,其中包括因为调用 get 办法触发内部字段核算而导致现已设置该值的状况。
abstractvoidroll(intfield,booleanup) 在给定的时刻字段上增加或减去(上/下)单个时刻单元,不更改更大的字段。
voidroll(intfield,intamount) 向指定日历字段增加指定(有符号的)时刻量,不更改更大的字段。
voidset(intfield,intvalue) 将给定的日历字段设置为给定值。
voidset(intyear,intmonth,intdate) 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。
voidset(intyear,intmonth,intdate,inthourOfDay,intminute) 设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。
voidset(intyear,intmonth,intdate,inthourOfDay,intminute,intsecond) 设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。
voidsetFirstDayOfWeek(intvalue) 设置一星期的榜首天是哪一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。
voidsetLenient(booleanlenient) 指定日期/时刻解说是否是宽松的。
voidsetMinimalDaysInFirstWeek(intvalue) 设置一年中榜首个星期所需的最少天数,例如,假如界说榜首个星期包含一年榜首个月的榜首天,则运用值1调用此办法。
voidsetTime(Date date) 运用给定的 Date 设置此 Calendar 的时刻。
voidsetTimeInMillis(longmillis) 用给定的long值设置此 Calendar 的当时时刻值。
voidsetTimeZone(TimeZone value) 运用给定的时区值来设置时区。
String toString() 回来此日历的字符串表明方式
Calendar的常用办法示例
1、核算某一月份的最大天数
Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year);
time.set(Calendar.MONTH,i-1);//注意,Calendar目标默许一月为0
intday=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数
注:在运用set办法之前,必须先clear一下,不然很多信息会继承自体系当时时刻
2、Calendar和Date的转化
(1) Calendar转化为Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
(2) Date转化为Calendar
Date date=newDate();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
3、格式化输出日期时刻
Date date=newDate();
SimpleDateFormat df=newSimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(df.format(date));
4、核算一年中的第几星期
(1)核算某一天是一年中的第几星期
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR,2006);
cal.set(Calendar.MONTH,8);
cal.set(Calendar.DAY_OF_MONTH,3);
intweekno=cal.get(Calendar.WEEK_OF_YEAR);
(2)核算一年中的第几星期是几号
SimpleDateFormat df=newSimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR,2006);
cal.set(Calendar.WEEK_OF_YEAR,1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(df.format(cal.getTime()));
输出:
2006-01-02
5、add()和roll()的用法
(1) add()办法
SimpleDateFormat df=newSimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR,2006);
cal.set(Calendar.MONTH,8);
cal.set(Calendar.DAY_OF_MONTH,3);
cal.add(Calendar.DATE, -4);
Date date=cal.getTime();
System.out.println(df.format(date));
cal.add(Calendar.DATE,4);
date=cal.getTime();
System.out.println(df.format(date));