(抽象类不能被实例化,只能被子类化)
Calendar.getInstance()
创建相关代码:
Calendar rightNow = Calendar.getInstance();
官方文档截图:
相关学习链接:
关于抽象类是否可以实例化问题
官方API文档Calendar类
下图为Calendar类常用的常量:public static final 数据类型 常量名;
:
下图来源于菜鸟编程:Java日期和时间
Calendar
对象的设置包括二部分,1:通过set()
对Calendar
的年
,月
,日
,时
,分
,秒
进行修改。2:通过add()
对Calendar
的时间在原基础上进行加
,减
操作。
1.set
官方AP关于set()的所有重载方法如下:
void set(int field, int value) //Sets the given calendar field to the given value. void set(int year, int month, int date) //Sets the values for the calendar fields YEAR, MONTH, and DAY_OF_MONTH. void set(int year, int month, int date, int hourOfDay, int minute) //Sets the values for the calendar fields YEAR, MONTH, DAY_OF_MONTH, HOUR_OF_DAY, and MINUTE. void set(int year, int month, int date, int hourOfDay, int minute, int second) //Sets the values for the fields YEAR, MONTH, DAY_OF_MONTH, HOUR_OF_DAY, MINUTE, and SECOND. void setFirstDayOfWeek(int value) //Sets what the first day of the week is; e.g., SUNDAY in the U.S., MONDAY in France. void setLenient(boolean lenient) //Specifies whether or not date/time interpretation is to be lenient. void setMinimalDaysInFirstWeek(int value) //Sets what the minimal days required in the first week of the year are; For example, if the first week is defined as one that //contains the first day of the first month of a year, call this method with value 1. void setTime(Date date) //Sets this Calendar's time with the given Date. void setTimeInMillis(long millis) //Sets this Calendar's current time from the given long value. void setTimeZone(TimeZone value) //Sets the time zone with the given time zone value. void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) //Sets the date of this Calendar with the given date specifiers - week year, week of year, and day of week.
代码实例:
1.1 使用public final void set(int year,int month,int date)对年,月,日进行修改
运行效果:
1.2 使用void set(int year, int month, int date, int hourOfDay, int minute, int second)对年,月,日,时,分,秒进行修改
c1.set(2009, 6, 12,20,32,30);//把Calendar对象c1的年月日时分秒分别设这为:2009,6,12,20,32,30
1.3 利用字段的类型设置:
如果只设定某个字段,例如日期的值,则可以使用如下set方法:
public void set(int field,int value)
把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算
c1.set(Calendar.DATE,10);
把c1对象代表的年份设置为2008年,其他的所有数值会被重新计算
c1.set(Calendar.YEAR,2008);
其他字段属性set的意义以此类推
2.add
官方AP关于add()方法如下:
abstract void add(int field, int amount) //Adds or subtracts the specified amount of time to the given calendar field, based on the calendar's rules.
把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, 10);
把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);
其他字段属性的add的意义以此类推
Calendar类对象信息的获得通过get()实现
注意:月份从0开始算起(0表示1月),所以获取的月份需要加1,星期是从周日开始算起的所以1代表星期日、2代表星期1、3代表星期二。。。7表示星期六)
Calendar c1 = Calendar.getInstance(); // 获得年份 int year = c1.get(Calendar.YEAR); // 获得月份 int month = c1.get(Calendar.MONTH) + 1; // 获得日期 int date = c1.get(Calendar.DATE); // 获得小时 int hour = c1.get(Calendar.HOUR_OF_DAY); // 获得分钟 int minute = c1.get(Calendar.MINUTE); // 获得秒 int second = c1.get(Calendar.SECOND); // 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推) int day = c1.get(Calendar.DAY_OF_WEEK);
(继承抽象类的子类实现抽象类里的所有抽象方法)
前面的Calendar rightNow = Calendar.getInstance();
方法返回一个默认用当前的语言环境和时区
初始化的GregorianCalendar对象,如果要对不同国家/时区的时间做操作需要使用GregorianCalendar。
1.下面列出GregorianCalendar对象的几个构造方法:
根据日历的规则,将指定的(签名)时间量添加到给定的日历字段。
void add(int field, int amount)
转换时间值(毫秒偏移距时代)到日历字段值。
protected void computeFields()
将日历字段值转换为时间值(从时代).
protected void computeTime()
比较一下GregorianCalendar到指定的Object.
boolean equals(Object obj)
获取GregorianCalendar中的默认区域设置。ZonedDateTime对象。
static GregorianCalendar from(ZonedDateTime zdt)
返回此日历字段可能具有的最大值,同时考虑到给定的时间值和getFirstDayOfWeek, getMinimalDaysInFirstWeek, getGregorianChange和getTimeZone方法。
int getActualMaximum(int field)
返回此日历字段可能具有的最小值,同时考虑到给定的时间值和getFirstDayOfWeek, getMinimalDaysInFirstWeek, getGregorianChange和getTimeZone方法。
int getActualMinimum(int field)
回报"gregory"作为日历类型。
String getCalendarType()
的给定日历字段的最高最小值。GregorianCalendar举个例子。
int getGreatestMinimum(int field)
获取公历更改日期。
Date getGregorianChange()
的给定日历字段的最低最大值。GregorianCalendar举个例子。
int getLeastMaximum(int field)
的给定日历字段的最大值。GregorianCalendar举个例子。
int getMaximum(int field)
的给定日历字段的最小值。GregorianCalendar举个例子。
int getMinimum(int field)
中的周数。周年代表这个GregorianCalendar.
int getWeeksInWeekYear()
返回周年代表这个GregorianCalendar.
int getWeekYear()
的哈希代码。GregorianCalendar对象。
int hashCode()
确定给定年份是否为闰年。
boolean isLeapYear(int year)
回报true表示GregorianCalendar支持周数。
boolean isWeekDateSupported()
在给定的时间场上加或减(上/下)一个时间单位,而不改变较大的字段。
void roll(int field, boolean up)
将有符号的金额添加到指定的日历字段,而不更改较大的字段。
void roll(int field, int amount)
设置GregorianCalendar更改日期。
void setGregorianChange(Date date)
设置这个GregorianCalendar到指定日期的日期-weekYear, weekOfYear,和dayOfWeek.
void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)
将此对象转换为ZonedDateTime表示时间线上与以下内容相同的点。GregorianCalendar.
ZonedDateTime toZonedDateTime()
import java.util.*; public class GregorianCalendarDemo { public static void main(String[] args) { String months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; int year; // 初始化 Gregorian 日历 // 使用当前时间和日期 // 默认为本地时间和时区 GregorianCalendar gcalendar = new GregorianCalendar(); // 显示当前时间和日期的信息 System.out.print("Date: "); System.out.print(months[gcalendar.get(Calendar.MONTH)]); System.out.print(" " + gcalendar.get(Calendar.DATE) + " "); System.out.println(year = gcalendar.get(Calendar.YEAR)); System.out.print("Time: "); System.out.print(gcalendar.get(Calendar.HOUR) + ":"); System.out.print(gcalendar.get(Calendar.MINUTE) + ":"); System.out.println(gcalendar.get(Calendar.SECOND)); // 测试当前年份是否为闰年 if(gcalendar.isLeapYear(year)) { System.out.println("当前年份是闰年"); } else { System.out.println("当前年份不是闰年"); } } }
用户可以通过SimpleDateFormat对时间的格式进行定义,构造函数的参数就是格式(如:yyyy年MM月dd日kk点mm分ss秒SSS毫秒
,这里yyyy会和具体时间的年分进行替换(format(date)里面的时间),对应表示MM表示月,dd表示日,kk表示时,mm表示分,ss表示秒,SSS表示毫秒)。
代码实例:
@Test public void test() { Calendar calendar = Calendar.getInstance(); calendar.set(2016, 11, 30, 24, 59, 59); Date date = new Date(calendar.getTimeInMillis()); String pattern = "G yyyy年MM月dd日HH点mm分ss秒SSS毫秒"; System.out.println(new SimpleDateFormat(pattern).format(date)); pattern = "G yyyy年MM月dd日kk点mm分ss秒SSS毫秒"; System.out.println(new SimpleDateFormat(pattern).format(date)); pattern = "G yyyy年MM月dd日hh点mm分ss秒SSS毫秒 a"; System.out.println(new SimpleDateFormat(pattern).format(date)); pattern = "G yyyy年MM月dd日KK点mm分ss秒SSS毫秒 a"; System.out.println(new SimpleDateFormat(pattern).format(date)); pattern = "G YYYY年MM月dd日KK点mm分ss秒SSS毫秒 a"; System.out.println(new SimpleDateFormat(pattern).format(date)); pattern = "2016年第w星期"; System.out.println(new SimpleDateFormat(pattern).format(date)); pattern = "2016年12月第W星期"; System.out.println(new SimpleDateFormat(pattern).format(date)); pattern = "2016年第D天"; System.out.println(new SimpleDateFormat(pattern).format(date)); pattern = "2016年12月第d天"; System.out.println(new SimpleDateFormat(pattern).format(date)); pattern = "2016年12月31日处在2016年12月的第F星期"; System.out.println(new SimpleDateFormat(pattern).format(date)); pattern = "E"; System.out.println(new SimpleDateFormat(pattern).format(date)); pattern = "2016年12月31日是所在星期的第u天"; System.out.println(new SimpleDateFormat(pattern).format(date)); pattern = "大西洋标准时间:z"; System.out.println(new SimpleDateFormat(pattern).format(date)); pattern = "Z"; System.out.println("RFC822时区:" + new SimpleDateFormat(pattern).format(date)); pattern = "X"; System.out.println("ISO8601时区:" + new SimpleDateFormat(pattern).format(date)); }
相关学习链接:
Java中SimpleDateFormat的使用方法