Java Calendar 类时间操作,代码很简单。
演示了获取时间,日期时间的累加和累减。
<span style="font-size:18px;">package MyTest; /* * 演示 Calendar 的一般操作 */ import java.util.Date; import java.text.SimpleDateFormat; import java.text.DateFormat; import java.util.Calendar; public class Test { public Test() { } public static void main(String[] args) { // 字符串转换日期格式 // DateFormat fmtDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 得到日期格式对象 // Date date = fmtDateTime.parse(strDateMake); // 完整显示日期时间 String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(new Date()); System.out.println(str); // 创建 Calendar 对象 Calendar calendar = Calendar.getInstance(); // 初始化 Calendar 对象,但并不必要,除非需要重置时间 calendar.setTime(new Date()); // setTime 类似上面一行 // Date date = new Date(); // calendar.setTime(date); // 显示年份 int year = calendar.get(Calendar.YEAR); System.out.println("YEAR is = " + String.valueOf(year)); // 显示月份 (从0开始, 实际显示要加一) int MONTH = calendar.get(Calendar.MONTH); System.out.println("MONTH is = " + (MONTH + 1)); // 今年的第 N 天 int DAY_OF_YEAR = calendar.get(Calendar.DAY_OF_YEAR); System.out.println("DAY_OF_YEAR is = " + DAY_OF_YEAR); // 本月第 N 天 int DAY_OF_MONTH = calendar.get(Calendar.DAY_OF_MONTH); System.out.println("DAY_OF_MONTH = " + String.valueOf(DAY_OF_MONTH)); // 3小时以后 calendar.add(Calendar.HOUR_OF_DAY, 3); int HOUR_OF_DAY = calendar.get(Calendar.HOUR_OF_DAY); System.out.println("HOUR_OF_DAY + 3 = " + HOUR_OF_DAY); // 当前分钟数 int MINUTE = calendar.get(Calendar.MINUTE); System.out.println("MINUTE = " + MINUTE); // 15 分钟以后 calendar.add(Calendar.MINUTE, 15); MINUTE = calendar.get(Calendar.MINUTE); System.out.println("MINUTE + 15 = " + MINUTE); // 30分钟前 calendar.add(Calendar.MINUTE, -30); MINUTE = calendar.get(Calendar.MINUTE); System.out.println("MINUTE - 30 = " + MINUTE); // 格式化显示 str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime()); System.out.println(str); // 重置 Calendar 显示当前时间 calendar.setTime(new Date()); str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime()); System.out.println(str); // 创建一个 Calendar 用于比较时间 Calendar calendarNew = Calendar.getInstance(); // 设定为 5 小时以前,后者大,显示 -1 calendarNew.add(Calendar.HOUR, -5); System.out.println("时间比较:" + calendarNew.compareTo(calendar)); // 设定7小时以后,前者大,显示 1 calendarNew.add(Calendar.HOUR, +7); System.out.println("时间比较:" + calendarNew.compareTo(calendar)); // 退回 2 小时,时间相同,显示 0 calendarNew.add(Calendar.HOUR, -2); System.out.println("时间比较:" + calendarNew.compareTo(calendar)); } } </span>
YEAR
public static final int YEAR
- 指示年的
get
和set
的字段数字。这是一个特定于日历的值;请参阅子类文档。- 另请参见:
- 常量字段值
MONTH
public static final int MONTH
- 指示月份的
get
和set
的字段数字。这是一个特定于日历的值。在格里高利历和罗马儒略历中一年中的第一个月是
JANUARY
,它为 0;最后一个月取决于一年中的月份数。- 另请参见:
- JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER, UNDECIMBER, 常量字段值
WEEK_OF_YEAR
public static final int WEEK_OF_YEAR
get
和set
的字段数字,指示当前年中的星期数。正如getFirstDayOfWeek()
和
getMinimalDaysInFirstWeek()
所定义的那样,一年中第一个星期的值为 1。子类定义一年第一个星期之前的天数,即
的值。
WEEK_OF_YEAR- 另请参见:
- getFirstDayOfWeek(), getMinimalDaysInFirstWeek(), 常量字段值
WEEK_OF_MONTH
public static final int WEEK_OF_MONTH
get
和set
的字段数字,指示当前月中的星期数。正如getFirstDayOfWeek()
和
getMinimalDaysInFirstWeek()
所定义的那样,一个月中第一个星期的值为 1。子类定义一个月第一个星期之前的天数,即
WEEK_OF_MONTH
的值。- 另请参见:
- getFirstDayOfWeek(), getMinimalDaysInFirstWeek(), 常量字段值
DATE
public static final int DATE
get
和set
的字段数字,指示一个月中的某天。它与DAY_OF_MONTH
是同义词。一个月中第一天的值为 1。- 另请参见:
- DAY_OF_MONTH, 常量字段值
DAY_OF_MONTH
public static final int DAY_OF_MONTH
get
和set
的字段数字,指示一个月中的某天。它与DATE
是同义词。一个月中第一天的值为 1。- 另请参见:
- DATE, 常量字段值
DAY_OF_YEAR
public static final int DAY_OF_YEAR
get
和set
的字段数字,指示当前年中的天数。一年中第一天的值为 1。- 另请参见:
- 常量字段值
DAY_OF_WEEK
public static final int DAY_OF_WEEK
get
和set
的字段数字,指示一个星期中的某天。该字段可取的值为SUNDAY
、MONDAY
、TUESDAY
、WEDNESDAY
、THURSDAY
、FRIDAY
和
SATURDAY
。- 另请参见:
- SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, 常量字段值
DAY_OF_WEEK_IN_MONTH
public static final int DAY_OF_WEEK_IN_MONTH
get
和set
的字段数字,指示当前月中的第几个星期。与DAY_OF_WEEK
字段一起使用时,就可以唯一地指定某月中的某一天。与
WEEK_OF_MONTH
和WEEK_OF_YEAR
不同,该字段的值并不 取决于
或
getFirstDayOfWeek()getMinimalDaysInFirstWeek()
。DAY_OF_MONTH
1 到
7
总是对应于DAY_OF_WEEK_IN_MONTH 1
;8
到
14
总是对应于DAY_OF_WEEK_IN_MONTH 2
,依此类推。DAY_OF_WEEK_IN_MONTH 0
表示
DAY_OF_WEEK_IN_MONTH 1
之前的那个星期。负值是从一个月的末尾开始逆向计数,因此,一个月的最后一个星期天被指定为
。因为负值是逆向计数的,所以它们在月份中的对齐方式通常与正值的不同。例如,如果一个月有 31 天,那么
DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1
DAY_OF_WEEK_IN_MONTH -1
将与DAY_OF_WEEK_IN_MONTH 5
和
的末尾相重叠。
DAY_OF_WEEK_IN_MONTH 4- 另请参见:
- DAY_OF_WEEK, WEEK_OF_MONTH, 常量字段值
AM_PM
public static final int AM_PM
get
和set
的字段数字,指示HOUR
是在中午之前还是在中午之后。例如,在 10:04:15.250 PM 这一时刻,AM_PM
为
PM
。- 另请参见:
- AM, PM, HOUR, 常量字段值
HOUR
public static final int HOUR
get
和set
的字段数字,指示上午或下午的小时。HOUR
用于 12 小时制时钟 (0 - 11)。中午和午夜用 0 表示,不用 12 表示。例如,在 10:04:15.250 PM 这一时刻,HOUR
为 10。- 另请参见:
- AM_PM, HOUR_OF_DAY, 常量字段值
HOUR_OF_DAY
public static final int HOUR_OF_DAY
get
和set
的字段数字,指示一天中的小时。HOUR_OF_DAY
用于 24 小时制时钟。例如,在 10:04:15.250 PM 这一时刻,HOUR_OF_DAY
为 22。- 另请参见:
- HOUR, 常量字段值
MINUTE
public static final int MINUTE
get
和set
的字段数字,指示一小时中的分钟。例如,在 10:04:15.250 PM 这一时刻,MINUTE
为 4。- 另请参见:
- 常量字段值
SECOND
public static final int SECOND
get
和set
的字段数字,指示一分钟中的秒。例如,在 10:04:15.250 PM 这一时刻,SECOND
为 15。- 另请参见:
- 常量字段值
MILLISECOND
public static final int MILLISECOND
get
和set
的字段数字,指示一秒中的毫秒。例如,在 10:04:15.250 PM 这一时刻,MILLISECOND
为 250。- 另请参见:
- 常量字段值
SUNDAY
public static final int SUNDAY
- 指示 Sunday 的 DAY_OF_WEEK 字段值。
- 另请参见:
- 常量字段值
MONDAY
public static final int MONDAY
- 指示 Monday 的 DAY_OF_WEEK 字段值。
- 另请参见:
- 常量字段值
TUESDAY
public static final int TUESDAY
- 指示 Tuesday 的 DAY_OF_WEEK 字段值。
- 另请参见:
- 常量字段值
WEDNESDAY
public static final int WEDNESDAY
- 指示 Wednesday 的 DAY_OF_WEEK 字段值。
- 另请参见:
- 常量字段值
THURSDAY
public static final int THURSDAY
- 指示 Thursday 的 DAY_OF_WEEK 字段值。
- 另请参见:
- 常量字段值
FRIDAY
public static final int FRIDAY
- 指示 Friday 的 DAY_OF_WEEK 字段值。
- 另请参见:
- 常量字段值
SATURDAY
public static final int SATURDAY
- 指示 Saturday 的 DAY_OF_WEEK 字段值。
- 另请参见:
- 常量字段值
JANUARY
public static final int JANUARY
- 指示在格里高利历和罗马儒略历中一年中第一个月的 MONTH 字段值。
- 另请参见:
- 常量字段值
FEBRUARY
public static final int FEBRUARY
- 指示在格里高利历和罗马儒略历中一年中第二个月的 MONTH 字段值。
- 另请参见:
- 常量字段值
MARCH
public static final int MARCH
- 指示在格里高利历和罗马儒略历中一年中第三个月的 MONTH 字段值。
- 另请参见:
- 常量字段值
APRIL
public static final int APRIL
- 指示在格里高利历和罗马儒略历中一年中第四个月的 MONTH 字段值。
- 另请参见:
- 常量字段值
MAY
public static final int MAY
- 指示在格里高利历和罗马儒略历中一年中第五个月的 MONTH 字段值。
- 另请参见:
- 常量字段值
JUNE
public static final int JUNE
- 指示在格里高利历和罗马儒略历中一年中第六个月的 MONTH 字段值。
- 另请参见:
- 常量字段值
JULY
public static final int JULY
- 指示在格里高利历和罗马儒略历中一年中第七个月的 MONTH 字段值。
- 另请参见:
- 常量字段值
AUGUST
public static final int AUGUST
- 指示在格里高利历和罗马儒略历中一年中第八个月的 MONTH 字段值。
- 另请参见:
- 常量字段值
SEPTEMBER
public static final int SEPTEMBER
- 指示在格里高利历和罗马儒略历中一年中第九个月的 MONTH 字段值。
- 另请参见:
- 常量字段值
OCTOBER
public static final int OCTOBER
- 指示在格里高利历和罗马儒略历中一年中第十个月的 MONTH 字段值。
- 另请参见:
- 常量字段值
NOVEMBER
public static final int NOVEMBER
- 指示在格里高利历和罗马儒略历中一年中第十一个月的 MONTH 字段值。
- 另请参见:
- 常量字段值
DECEMBER
public static final int DECEMBER
- 指示在格里高利历和罗马儒略历中一年中第十二个月的 MONTH 字段值。
- 另请参见:
- 常量字段值
UNDECIMBER
public static final int UNDECIMBER
- 指示一年中第十三个月的 MONTH 字段值。尽管
GregorianCalendar
没有使用该值,但阴历会使用。- 另请参见:
- 常量字段值
time
protected long time
日历的当前设置时间,以毫秒为单位,表示自格林威治标准时间 1970 年 1月 1 日 0:00:00 后经过的时间。
getTime
public final Date getTime()
- 返回一个表示此
Calendar
时间值(从历元至现在的毫秒偏移量)的
Date
对象。 -
- 返回:
- 表示时间值的
Date
。 - 另请参见:
- setTime(Date), getTimeInMillis()
setTime
public final void setTime(Date date)
- 使用给定的
Date
设置此 Calendar 的时间。注:使用
Date(Long.MAX_VALUE)
或Date(Long.MIN_VALUE)
调用
setTime()
可能产生来自get()
的错误字段值。 -
- 参数:
date
- 给定的 Date。- 另请参见:
- getTime(), setTimeInMillis(long)
-
getTimeInMillis
public long getTimeInMillis()
- 返回此 Calendar 的时间值,以毫秒为单位。
-
- 返回:
- 当前时间,以从历元至现在所经过的 UTC 毫秒数形式。
- 另请参见:
- getTime(), setTimeInMillis(long)
- 用给定的 long 值设置此 Calendar 的当前时间值。
-
- 参数:
millis
- 新时间,以从历元至现在所经过的 UTC 毫秒数形式。- 另请参见:
- setTime(Date), getTimeInMillis()
- 返回给定日历字段的值。在 lenient 模式下,所有日历字段都被标准化。在 non-lenient 模式下,所有日历字段都是经过验证的,如果任何日历字段有超出范围的值,则此方法抛出一个异常。标准化和验证都是通过 complete() 方法处理的,这个过程与日历系统有关。
-
- 参数:
field
- 给定的日历字段。- 返回:
- 给定日历字段的值。
- 抛出:
ArrayIndexOutOfBoundsException
- 如果指定字段超出范围 (field < 0 || field >= FIELD_COUNT
)。- 另请参见:
- set(int,int), complete()
-
add
public abstract void add(int field, int amount)
- 根据日历的规则,为给定的日历字段添加或减去指定的时间量。例如,要从当前日历时间减去 5 天,可以通过调用以下方法做到这一点:
add(Calendar.DAY_OF_MONTH, -5)
。 -
- 参数:
field
- 日历字段。amount
- 为字段添加的日期或时间量。- 另请参见:
- roll(int,int), set(int,int)
- 将给定的日历字段设置为给定值。不管处于何种宽松性模式下,该值都不由此方法进行解释。
-
- 参数:
field
- 给定的日历字段。value
- 给定日历字段所要设置的值。- 抛出:
ArrayIndexOutOfBoundsException
- 如果指定字段超出范围 (field < 0 || field >= FIELD_COUNT
),并且处于 non-lenient 模式下。- 另请参见:
- set(int,int,int), set(int,int,int,int,int), set(int,int,int,int,int,int), get(int)
- 设置日历字段
YEAR
、MONTH
和
DAY_OF_MONTH
的值。保留其他日历字段以前的值。如果不需要这样做,则先调用 clear()。 -
- 参数:
year
- 用来设置YEAR
日历字段的值。month
- 用来设置MONTH
日历字段的值。Month 值是基于 0 的。例如,0 表示 January。date
- 用来设置DAY_OF_MONTH
日历字段的值。- 另请参见:
- set(int,int), set(int,int,int,int,int), set(int,int,int,int,int,int)
- 设置日历字段
YEAR
、MONTH
、DAY_OF_MONTH
、HOUR_OF_DAY
和
MINUTE
的值。保留其他字段以前的值。如果不需要这样做,则先调用 clear()。 -
- 参数:
year
- 用来设置YEAR
日历字段的值。month
- 用来设置MONTH
日历字段的值。Month 值是基于 0 的。例如,0 表示 January。date
- 用来设置DAY_OF_MONTH
日历字段的值。hourOfDay
- 用来设置HOUR_OF_DAY
日历字段的值。minute
- 用来设置MINUTE
日历字段的值。- 另请参见:
- set(int,int), set(int,int,int), set(int,int,int,int,int,int)
- 设置字段
YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
、MINUTE
和
SECOND
的值。保留其他字段以前的值。如果不需要这样做,则先调用 clear()。 -
- 参数:
year
- 用来设置YEAR
日历字段的值。month
- 用来设置MONTH
日历字段的值。Month 值是基于 0 的。例如,0 表示 January。date
- 用来设置DAY_OF_MONTH
日历字段的值。hourOfDay
- 用来设置HOUR_OF_DAY
日历字段的值。minute
- 用来设置MINUTE
日历字段的值。second
- 用来设置SECOND
日历字段的值。- 另请参见:
- set(int,int), set(int,int,int), set(int,int,int,int,int)
setTimeInMillis
public void setTimeInMillis(long millis)
get
public int get(int field)
set
public void set(int field, int value)
set
public final void set(int year, int month, int date)
set
public final void set(int year, int month, int date, int hourOfDay, int minute)
set
public final void set(int year, int month, int date, int hourOfDay, int minute, int second)
时间: 2024-08-27 18:53:59