JAVA Calendar具体解释
作者:网络转载 发布时间:[ 2015/2/15 14:35:49 ] 推荐标签:Java 软件开发
到底什么是一个 Calendar 呢?中文的翻译是日历,那我们立马能够想到我们生活中有阳(公)历、阴(农)历之分。它们的差别在哪呢?
比方有:
月份的定义 - 阳`(公)历 一年12 个月,每一个月的天数各不同;阴(农)历,每一个月固定28天
每周的第 - 阳(公)历星期日是第;阴(农)历,星期一是第
实际上,在历史上有着很多种纪元的方法。它们的差异实在太大了,比方说一个人的生日是"八月八日" 那么一种可能是阳(公)历的八月八日,但也可以是阴(农)历的日期。所以为了计时的统一,必需指定一个日历的选择。那如今为普及和通用的日历是 "Gregorian Calendar"。也是我们在讲述年份时经常使用 "公元几几年"。Calendar 抽象类定义了足够的方法,让我们可以表述日历的规则。Java 本身提供了对 "Gregorian Calendar" 规则的实现。我们从 Calendar.getInstance() 中所获得的实例是一个 "GreogrianCalendar" 对象(与您通过 new GregorianCalendar() 获得的结果一致)。
以下的代码能够证明这一点:
import java.io.*;
import java.util.*;
public class WhatIsCalendar
{
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
if (calendar instanceof GregorianCalendar)
System.out.println("It is an instance of GregorianCalendar"t;
}
}
Calendar 在 Java 中是一个抽象类(Abstract Class),GregorianCalendar 是它的一个详细实现。
我们也能够自己的 Calendar 实现类,然后将它作为 Calendar 对象返回(面向对象的特性)。在 IBM alphaWorks 上,IBM 的开发者实现了多种日历。相同在 Internet 上,也有对中国农历的实现。本文对怎样扩展 Calendar 不作讨论,大家能够通过察看上述 Calendar 的源代码来学习。
Calendar 与 Date 的转换很easy:
Calendar calendar = Calendar.getInstance();
// 从一个 Calendar 对象中获取 Date 对象
Date date = calendar.getTime();
// 将 Date 对象反应到一个 Calendar 对象中,
// Calendar/GregorianCalendar 没有构造函数能够接受 Date 对象
// 所以我们必需先获得一个实例,然后设置 Date 对象
calendar.setTime(date);
Calendar 对象在使用时,有一些值得注意的事项:
1. Calendar 的 set() 方法
set(int field, int value) - 是用来设置"年/月/日/小时/分钟/秒/微秒"等值
field 的定义在 Calendar 中
set(int year, int month, int day, int hour, int minute, int second) 但没有
set(int year, int month, int day, int hour, int minute, int second, int millisecond) 前面 set(int,int,int,int,int,int) 方法不会自己主动将 MilliSecond 清为 0。
另外,月份的起始值为0而不是1,所以要设置八月时,我们用7而不是8。
calendar.set(Calendar.MONTH, 7);
我们通常须要在程序逻辑中将它清为 0,否则可能会出现以下的情况:
import java.io.*;
import java.util.*;
public class WhatIsCalendarWrite
{
public static void main(String[] args) throws Exception{
ObjectOutputStream out =
new ObjectOutputStream(
new FileOutputStream("calendar.out"t);
Calendar cal1 = Calendar.getInstance();
cal1.set(2000, 7, 1, 0, 0, 0);
out.writeObject(cal1);
Calendar cal2 = Calendar.getInstance();
cal2.set(2000, 7, 1, 0, 0, 0);
cal2.set(Calendar.MILLISECOND, 0);
out.writeObject(cal2);
out.close();
}
}

sales@spasvo.com