java解惑之Calendar

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
指示年的 getset 的字段数字。这是一个特定于日历的值;请参阅子类文档。

另请参见:
常量字段值

MONTH

public static final int MONTH
指示月份的 getset 的字段数字。这是一个特定于日历的值。在格里高利历和罗马儒略历中一年中的第一个月是
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
getset 的字段数字,指示当前年中的星期数。正如 getFirstDayOfWeek()
getMinimalDaysInFirstWeek() 所定义的那样,一年中第一个星期的值为 1。子类定义一年第一个星期之前的天数,即
WEEK_OF_YEAR
的值。

另请参见:
getFirstDayOfWeek(), getMinimalDaysInFirstWeek(), 常量字段值

WEEK_OF_MONTH

public static final int WEEK_OF_MONTH
getset 的字段数字,指示当前月中的星期数。正如 getFirstDayOfWeek()
getMinimalDaysInFirstWeek() 所定义的那样,一个月中第一个星期的值为 1。子类定义一个月第一个星期之前的天数,即
WEEK_OF_MONTH 的值。

另请参见:
getFirstDayOfWeek(), getMinimalDaysInFirstWeek(), 常量字段值

DATE

public static final int DATE
getset 的字段数字,指示一个月中的某天。它与 DAY_OF_MONTH 是同义词。一个月中第一天的值为 1。

另请参见:
DAY_OF_MONTH, 常量字段值

DAY_OF_MONTH

public static final int DAY_OF_MONTH
getset 的字段数字,指示一个月中的某天。它与 DATE 是同义词。一个月中第一天的值为 1。

另请参见:
DATE, 常量字段值

DAY_OF_YEAR

public static final int DAY_OF_YEAR
getset 的字段数字,指示当前年中的天数。一年中第一天的值为 1。

另请参见:
常量字段值

DAY_OF_WEEK

public static final int DAY_OF_WEEK
getset 的字段数字,指示一个星期中的某天。该字段可取的值为 SUNDAYMONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAY
SATURDAY

另请参见:
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, 常量字段值

DAY_OF_WEEK_IN_MONTH

public static final int DAY_OF_WEEK_IN_MONTH
getset 的字段数字,指示当前月中的第几个星期。与 DAY_OF_WEEK 字段一起使用时,就可以唯一地指定某月中的某一天。与
WEEK_OF_MONTHWEEK_OF_YEAR 不同,该字段的值并 取决于
getFirstDayOfWeek()
getMinimalDaysInFirstWeek()DAY_OF_MONTH
1 到 7 总是对应于 DAY_OF_WEEK_IN_MONTH 18
14 总是对应于 DAY_OF_WEEK_IN_MONTH 2,依此类推。DAY_OF_WEEK_IN_MONTH 0 表示
DAY_OF_WEEK_IN_MONTH 1 之前的那个星期。负值是从一个月的末尾开始逆向计数,因此,一个月的最后一个星期天被指定为
DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1
。因为负值是逆向计数的,所以它们在月份中的对齐方式通常与正值的不同。例如,如果一个月有 31 天,那么
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
getset 的字段数字,指示 HOUR 是在中午之前还是在中午之后。例如,在 10:04:15.250 PM 这一时刻,AM_PM
PM

另请参见:
AM, PM, HOUR, 常量字段值

HOUR

public static final int HOUR
getset 的字段数字,指示上午或下午的小时。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
getset 的字段数字,指示一天中的小时。HOUR_OF_DAY 用于 24 小时制时钟。例如,在 10:04:15.250 PM 这一时刻,HOUR_OF_DAY 为 22。

另请参见:
HOUR, 常量字段值

MINUTE

public static final int MINUTE
getset 的字段数字,指示一小时中的分钟。例如,在 10:04:15.250 PM 这一时刻,MINUTE 为 4。

另请参见:
常量字段值

SECOND

public static final int SECOND
getset 的字段数字,指示一分钟中的秒。例如,在 10:04:15.250 PM 这一时刻,SECOND 为 15。

另请参见:
常量字段值

MILLISECOND

public static final int MILLISECOND
getset 的字段数字,指示一秒中的毫秒。例如,在 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)

setTimeInMillis

public void setTimeInMillis(long millis)
用给定的 long 值设置此 Calendar 的当前时间值。
参数:
millis - 新时间,以从历元至现在所经过的 UTC 毫秒数形式。
另请参见:
setTime(Date), getTimeInMillis()

get

public int get(int field)
返回给定日历字段的值。在 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)

set

public void set(int field,
                int value)
将给定的日历字段设置为给定值。不管处于何种宽松性模式下,该值都不由此方法进行解释。
参数:
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)

set

public final void set(int year,
                      int month,
                      int date)
设置日历字段 YEARMONTH
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)

set

public final void set(int year,
                      int month,
                      int date,
                      int hourOfDay,
                      int minute)
设置日历字段 YEARMONTHDAY_OF_MONTHHOUR_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)

set

public final void set(int year,
                      int month,
                      int date,
                      int hourOfDay,
                      int minute,
                      int second)
设置字段 YEARMONTHDAY_OF_MONTHHOURMINUTE
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)
时间: 2024-08-27 18:53:59

java解惑之Calendar的相关文章

《Java解惑》读书笔记

 摘选自<Java解惑>一书,之前整理了部分,一直没看完,最近为了督促自己每天读点这本书,决定一天至少更新一个谜题的内容,欢迎讨论. 欢迎关注技术博客http://blog.sina.com.cn/u/1822488043 Java解惑读书笔记 谜题1:奇数性 取余操作的定义: ( a / b ) * b + ( a % b ) = a 其中(a/b)是java运算的结果,也就是a/b是一个整数,比如3/2=1. 所以当取余操作返回一个非零结果的时候,它与左操作数具有相同符号. 请测试你的

Java解惑五:类之谜

本文是依据JAVA解惑这本书,做的笔记.电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题46 函数重载的问题. JAVA重载解析过程:1. 选取全部可用的方法或者构造器:2. 从过程1中选取的方法或构造器中选择最精确的. 一般而言:能够强制要求编译器选择一个精确的重载版本号,将实參转型为形參所声明的类型. 谜题47 继承中静态域的问题. 静态域由声明它的类及其全部子类共享. 假设须要让每个子类都具有某个域的单独拷贝,必须在每个子

Java解惑六:库之谜

本文是根据JAVA解惑这本书,做的笔记. 电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题56 BigInteger.BigDecimal以及包装类型的实例是不可改变. BigInteger five = new BigInteger("5"); BigInteger total = BigInteger.ZERO; total.add(five); //这并不会改变total的值,调用该方法的返回值,才是加法得到的结

【java解惑】final域变量初始化顺序

如下所示代码: public class Example049 { private final int overtime; public static final Example049 INSTANCE = new Example049();//1 private static final int CURRENT_YEAR = Calendar.getInstance().get( Calendar.YEAR);//2 private Example049() { overtime = CURR

【java解惑】前缀自增自减和后缀自增自减问题

    如下代码: public class Example025 { public static void main(String[] args) { int ape = 100; int it = 100; int ape_it = 100; for (int i = 0; i < 100; i++) { ape--; it = it--; ape_it = --ape_it; } System.out.println("ape = " + ape); System.out.

《Java 解惑》笔记(一)

<Java 解惑>里都是一些编程时容易忽略的细节,却也蛮有意思的,所以将里面的内容稍作整理,简略地概括一下: 1.奇数性 在编程的时候经常会遇到要判断传进来的参数是否为奇数,而且容易惯性地认为判断余数是否为1即可,如下代码: public static boolean isOdd ( int i ) { return i % 2 == 1 } 这段程序在四分之一的时间里返回的都是错误的答案 因为在所有的 int 数值中,有一半都是负数,而 isOdd 方法对于对所有负奇数的判断都会失败.在任何

java解惑之常常忘记的事

java解惑之常常忘记的事 2012-10-17 18:38:57|  分类: JAVA |  标签:基础知识  软件开发  |举报|字号 订阅 针对刚接触java的菜鸟来说,java基础知识都是我们必须认真学习的,但是在工作过几年时间的老鸟来说,有时候也会对java的基础知识产生疑问,对于这种不确定,并且很容易混淆的知识点,java解惑已经为大家进行了很好的总结,现在借用一个作者的总结,进行一下罗列,希望能对你有所帮助. 1. 奇偶判断 不要使用 i % 2 == 1 来判断是否是奇数,因为i

Java解惑七:更多类之谜

谜题66 继承的问题. 对于实例方法:命名相同时,子类会覆写父类的方法,且访问权限至少和父类一样大. 对于域:命名相同时,子类会隐藏父类的域,且访问权限任意. 谜题67 不要重用库中的类名. 谜题68 命名的问题. 类名应该以大写字母开头,形式为:MixedCase. 变量以小写字母开头,形式为:mixedCase. 常量以大写字母开头,形式为:MIXED_CASE. 单个大写字母,只能用于类型参数,形式为:Map<K, V>. 包名应该都是小写,形式为:lower.case. 当一个变量和一

【java解惑】重载构造函数

如下所示代码: public class Example046 { private Example046(Object o) { System.out.println("Object"); } private Example046(double[] dArray) {//2 System.out.println("double array"); } private Example046(String str) {//3 System.out.println(&quo