JavaSE基础之-Calendar时间类

目录:

一:Calendar类

  1. Calendar来源于Java.util包下
  2. Calendar是一个抽象类(抽象类不能被实例化,只能被子类化)
  3. Calendar通过Calendar.getInstance()创建

相关代码:

Calendar rightNow = Calendar.getInstance();

官方文档截图:
JavaSE基础之-Calendar时间类
相关学习链接:
关于抽象类是否可以实例化问题
官方API文档Calendar类

二.Calendar类常用属性,方法

2.1 常量

下图为Calendar类常用的常量:public static final 数据类型 常量名;:
下图来源于菜鸟编程:Java日期和时间
JavaSE基础之-Calendar时间类

2.2 Calendar类对象信息的设置和获得

2.3 Calendar类对象信息的设置

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)对年,月,日进行修改
JavaSE基础之-Calendar时间类
运行效果:
JavaSE基础之-Calendar时间类

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的意义以此类推

2.4 Calendar类对象信息的获得

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

三.GregorianCalendar类

3.1 GregorianCalendar相关概念

  1. GregorianCalendar来源于Java.util包下
  2. GregorianCalendar是Calendar的子类(继承抽象类的子类实现抽象类里的所有抽象方法)
  3. 提供了世界上大多数国家/地区使用的标准日历系统
    JavaSE基础之-Calendar时间类

前面的Calendar rightNow = Calendar.getInstance();方法返回一个默认用当前的语言环境和时区初始化的GregorianCalendar对象,如果要对不同国家/时区的时间做操作需要使用GregorianCalendar。

3.2 GregorianCalendar构造方法

1.下面列出GregorianCalendar对象的几个构造方法:
JavaSE基础之-Calendar时间类

3.3 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()

3.4 代码实例

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

用户可以通过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的使用方法

上一篇:JAVASE泛型


下一篇:Map遍历