20230522 java.util.Calendar

发布时间 2023-09-05 09:19:36作者: 流星<。)#)))≦

介绍

  • java.util.Calendar
  • public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar>
  • 抽象类,提供了特定时刻和一组日历域(field)
  • 特定时刻用毫秒值表示,从 Epoch 1970年1月1日0时(GMT,公历)开始的偏移量
  • getInstance 方法返回对象
  • 支持 Locale, TimeZone
  • 支持 lenient 宽松模式
  • set 、 add 和 roll 可以更改日历域

API

常量字段

日历域(field)

配合 get / set 方法使用:

| 字段 | 值 | 含义|
|---|---|---|---|
| ERA | 0 | 纪元 |
| YEAR | 1 | 年 |
| MONTH | 2 | 月,一年的第一个月是JANUARY ,值为 0 |
| WEEK_OF_YEAR | 3 | 当年的周数,一年中的第一周,值为 1 |
| WEEK_OF_MONTH | 4 | 当月的周数,一个月的第一周,值为 1 |
| DATE | 5 | 月份中的日期。DAY_OF_MONTH 的同义词。月的第一天的值为 1 |
| DAY_OF_MONTH | 5 | DATE 的同义词 |
| DAY_OF_YEAR | 6 | 当前年份中的天数。一年的第一天的值为 1 |
| DAY_OF_WEEK | 7 | 星期几 |
| DAY_OF_WEEK_IN_MONTH | 8 | 当前月份中星期几 |
| AM_PM | 9 | 中午之前还是之后 |
| HOUR | 10 | 上午或下午的小时,用于 12 小时制 (0 - 11)。中午和午夜用 0 表示,而不是 12。 |
| HOUR_OF_DAY | 11 | 一天中的小时数。 HOUR_OF_DAY用于 24 小时制 |
| MINUTE | 12 | 小时内的分钟 |
| SECOND | 13 | 分钟内的秒数 |
| MILLISECOND | 14 | 秒内的毫秒数 |
| ZONE_OFFSET | 15 | 与 GMT 的原始偏移量(以毫秒为单位) |
| DST_OFFSET | 16 | 以毫秒为单位的夏令时偏移量 |
| FIELD_COUNT | 17 | get和set识别的域的数量,不能配合 get / set 方法使用 |

MONTH

  • JANUARY : 0
  • FEBRUARY : 1
  • MARCH : 2
  • APRIL : 3
  • MAY : 4
  • JUNE : 5
  • JULY : 6
  • AUGUST : 7
  • SEPTEMBER : 8
  • OCTOBER : 9
  • NOVEMBER : 10
  • DECEMBER : 11
  • UNDECIMBER : 12 ,一年中的第十三个月,GregorianCalendar不使用此值,农历会使用

DAY_OF_WEEK

  • SUNDAY : 1
  • MONDAY : 2
  • TUESDAY : 3
  • WEDNESDAY : 4
  • THURSDAY : 5
  • FRIDAY : 6
  • SATURDAY : 7

AM_PM

  • AM : 0 ,午前
  • PM : 1 ,午后

STYLE 样式

配合 getDisplayNamegetDisplayNames 使用

  • ALL_STYLES : 0 ,只能配合 getDisplayNames 使用
  • SHORT, SHORT_FORMAT : 1
  • LONG, LONG_FORMAT : 2
  • NARROW_FORMAT : 4
  • NARROW_STANDALONE : 32772
  • SHORT_STANDALONE : 32769
  • LONG_STANDALONE : 32770

静态方法

  • getInstance
    • 获取 Calendar 对象,支持 TimeZoneLocale
  • getAvailableCalendarTypes
    • 获取Calendar支持的所有日历类型
  • getAvailableLocales
    • 获取Calender可用的所有 Locale 对象数组

公共方法

日历 Calendar

  • getCalendarType

    • 返回此Calendar的日历类型
  • isLenient , setLenient

    • 宽松模式
  • getDisplayName

  • getDisplayNames

    • 返回给定style和locale中日历域的字符串表示形式
  • getTimeInMillis , setTimeInMillis

    • 从 1970年1月1日0时距今的 UTC 毫秒值
  • getTimeZone , setTimeZone

    • 时区
  • isWeekDateSupported

    • 判断当前Calendar对象是否支持周数的表示方式,周数的计算方式,可以根据ISO-8601标准来进行计算
  • getWeeksInWeekYear

    • 当年的总周数
  • getWeekYear , setWeekDate

    • 返回当前周年
  • getFirstDayOfWeek , setFirstDayOfWeek

    • 一周的第一天是什么;例如,美国的SUNDAY ,法国的MONDAY
  • getMinimalDaysInFirstWeek , setMinimalDaysInFirstWeek

    • 获取一年中第一周所需的最少天数;例如,如果第一周定义为包含一年第一个月的第一天的一周,则此方法返回 1。如果所需的最少天数必须是整周,则此方法返回 7
  • after , before

  • compareTo

日历域(field)

  • get , set

  • getMaximum, getMinimum

    • get 可能返回的最大值、最小值
  • getActualMaximum , getActualMinimum

    • 当前Calendar对象的给定日历域的最大值、最小值
  • getGreatestMinimum

    • getActualMinimum 可能返回的最大值
  • getLeastMaximum

    • getActualMaximum 可能返回的最小值
  • isSet

    • 判断指定日历域是否已经设置值
Calendar calendar = Calendar.getInstance();     // 2023-05-22
System.out.println(calendar.getActualMaximum(Calendar.DAY_OF_MONTH));  // 31
System.out.println(calendar.getActualMinimum(Calendar.DAY_OF_MONTH));  // 1
System.out.println(calendar.getGreatestMinimum(Calendar.DAY_OF_MONTH));  // 1
System.out.println(calendar.getLeastMaximum(Calendar.DAY_OF_MONTH));  // 28
修改
  • add
    • 增加或减少指定的时间
  • roll
    • 在给定时间字段上添加或减去(向上/向下)单个时间单位而不更改更大的字段。例如,在日期 01/31/96 滚动月份将导致 02/29/96
  • clear
    • 重置当前 Calendar 对象或日历域

java.util.Date 相互转化

  • getTime , setTime

Instant 相互转化

  • toInstant
    • 转为 Instant

Instant 转为 Calendar

Instant instant = Instant.now();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(instant.toEpochMilli());

Calendar.Builder

支持 Builder 模式

  • build

set 系列方法:

日历域相关:

  • set(int field, int value)
  • setTimeOfDay(int hourOfDay, int minute, int second)
  • setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)
  • setWeekDefinition(int firstDayOfWeek, int minimalDaysInFirstWeek)
  • setDate(int year, int month, int dayOfMonth)
  • setFields(int... fieldValuePairs)
  • setInstant
    • 设置时刻,入参类型是 Datelong

日历相关:

  • setCalendarType
    • 设置日历类型
  • setLenient
  • setLocale
  • setTimeZone