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));