Java日期相关类的使用

  
1          常用的类
1.1         Calendar
Calendar类主要提供了一个时间值和日历字段的一个对应和转换关系。这个时间值是距 历元(即格林威治标准时间1970年1月1日的00:00:00.000,格里高利历)的偏移量,是个毫秒值。
 
获取Calendar对象采用getInstance()方法,它使用了默认的时区和语言环境。
查看getInstance的JDK源代码
    public static Calendar getInstance()
    {
        Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
       cal.sharedZone = true;
       return cal;
    }
 
也可以指定时区和语言环境,TimeZone和Locale
 
Calendar d1 = Calendar.getInstance();
d1.setTimeZone(TimeZone.getTimeZone("GMT+9:00"));
d1.set(Calendar.DAY_OF_MONTH,1);
 
System.out.println(d1.getTime());
输出为
Tue May 01 14:46:58 GMT+08:00 2007
当前系统时间为 15:46:58
 
Calendar的clear方法清除日历字段值和时间值
 
static  Calendar
static  Calendar
static  Calendar
static  Calendar
 
 
Calendar有两种解释日历字段的模式,即lenient和non-lenient。当Calendar处于lenient 模式时,它可接受比它所生成的日历字段范围更大范围内的值。例如
Calendar的默认模式为lenient。
Calendar d1 = Calendar.getInstance();
d1.set(Calendar.MONTH,13);
 
当Calendar处于non-lenient模式时,如果其日历字段中存在任何不一致性,它都会抛出一个异常。
Calendar d1 = Calendar.getInstance();
d1.setLenient(false);
d1.set(Calendar.MONTH,13);
程序运行后出现异常:
Exception in thread "main" java.lang.IllegalArgumentException : MONTH
    at java.util.GregorianCalendar.computeTime( GregorianCalendar.java:2315 )
    at java.util.Calendar.updateTime( Calendar.java:2260 )
    at java.util.Calendar.getTimeInMillis( Calendar.java:1044 )
    at java.util.Calendar.getTime( Calendar.java:1017 )
    at date.CalendarTest.main( CalendarTest.java:32 )
 
 
可以使用三种方法更改日历字段:set()、add() 和 roll()。
set(f, value) 将日历字段 f 更改为 value
add(f, delta) 将 delta 添加到 f 字段中。这等同于调用 set(f, get(f) + delta),但要带以下两个调整:
Add 规则 1。调用后 f 字段的值减去调用前 f 字段的值等于 delta,以字段 f 中发生的任何溢出为模。溢出发生在字段值超出其范围时,结果,下一个更大的字段会递增或递减,并将字段值调整回其范围内。
Add 规则 2。如果期望某一个更小的字段是不变的,但让它等于以前的值是不可能的,因为在字段 f 发生更改之后,或者在出现其他约束之后,比如时区偏移量发生更改,它的最大值和最小值也在发生更改,然后它的值被调整为尽量接近于所期望的值。更小的字段表示一个更小的时间单元。HOUR 是一个比 DAY_OF_MONTH 小的字段。对于不期望是不变字段的更小字段,无需进行任何调整。日历系统会确定期望不变的那些字段。
 
roll(f, delta) 将 delta 添加到 f 字段中,但不更改更大的字段
 
 
下面是从JDK中对Calendar类的构造函数和方法的总结。
构造方法摘要
protected
protected
 
方法摘要
abstract  void
 boolean
 boolean
 void
 void
  Object
 int
protected  void
protected abstract  void
protected abstract  void
 boolean
 int
get返回给定日历字段的值。(int field)
          
 int
 int
static  Locale[]
 int
abstract  int
static  Calendar
static  Calendar
static  Calendar
static  Calendar
abstract  int
abstract  int
 int
abstract  int
  Date
 long
getTimeZone获得时区。()
          
 int
protected  int
internalGet返回给定日历字段的值。(int field)
          
 boolean
 boolean
abstract  void
 void
 void
set将给定的日历字段设置为给定值。(int field, int value)
          
 void
set设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。(int year, int month, int date)
          
 void
set设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。(int year, int month, int date, int hourOfDay, int minute)
          
 void
set设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。(int year, int month, int date, int hourOfDay, int minute, int second)
          
 void
 void
setLenient指定日期/时间解释是否是宽松的。(boolean lenient)
          
 void
 void
 void
 void
  String
 
1.2         Date
Date的构造函数现在只有Date()和Date(long date)使用了,其余4个都已过时不采用了。换作使用Calendar的set方法和GregorianCalendar的构造函数。
Date的方法中用来获取和设置年,月,日,小时,分钟,秒的方法也都被Calendar的get方法所取代。转换成字符串的方法只有toString还在使用。
before、after、clone、equals、compareTo、getTime、setTime。
clone使用在不想破坏原有Date对象的数据。
 
 
下面是从JDK中对Date类的构造函数和方法的总结。
 
方法摘要
 boolean
 boolean
  Object
clone返回此对象的副本。()
          
 int
compareTo比较两个日期的顺序。( Date anotherDate)
          
 boolean
equals比较两个日期的相等性。( Object obj)
          
 int
 int
 int
 int
 int
 int
 long
 int
 int
 int
static long
 void
 void
 void
 void
 void
 void
 void
  String
  String
  String
static long
 
1.3         SimpleDateFormat
SimpleDateFormat是一个以与语言环境相关的方式来格式化和分析日期的具体类。它允许进行格式化(日期->文本)、分析(文本->日期)和规范化。
 
创建一个SimpleDateFormat,通常是 SimpleDateFormat用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。( String pattern)
        
 
例如将一个Date格式化为日期/时间字符串
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("GG ww WW DD a yyyy-MM-dd hh:mm:ss zzz ZZZ");
System.out.println(df.format(date));
 
 
输出
公元 19 02 129 下午 2007-05-09 04:06:01 GMT+08:00 +0800
 
 
从给定字符串的开始分析文本,以生成一个日期
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try {
       date = df.parse("2000-11-23 23:12:00");
} catch (ParseException e) {
       e.printStackTrace();
}
       System.out.println(date);
输出
Thu Nov 23 23:12:00 GMT+08:00 2000
 
模式
字母
日期或时间元素
表示
示例
G
Era 标志符
AD
y
1996; 96
M
年中的月份
July; Jul; 07
w
年中的周数
27
W
月份中的周数
2
D
年中的天数
189
d
月份中的天数
10
F
月份中的星期
2
E
星期中的天数
Tuesday; Tue
a
Am/pm 标记
PM
H
一天中的小时数( 0-23
0
k
一天中的小时数( 1-24
24
K
am/pm 中的小时数( 0-11
0
h
am/pm 中的小时数( 1-12
12
m
小时中的分钟数
30
s
分钟中的秒数
55
S
毫秒数
978
z
时区
Pacific Standard Time; PST; GMT-08:00
Z
时区
-0800
 
1.4         DateFormat
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、分析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年,1 月 1 日 00:00:00 这一刻开始的毫秒数。
 
方法摘要
  Object
clone重写 Cloneable()
          
 boolean
equals重写 equals( Object obj)
          
  String
abstract   StringBuffer
format将一个 Date 格式化为日期/时间字符串。( Date date, StringBuffer toAppendTo, FieldPosition fieldPosition)
          
format重写 Format。( Object obj, StringBuffer toAppendTo, FieldPosition fieldPosition)
          
static  Locale[]
static  DateFormat
static  DateFormat
static  DateFormat
static  DateFormat
static  DateFormat
static  DateFormat
static  DateFormat
static  DateFormat
static  DateFormat
static  DateFormat
getTimeZone获得时区。()
          
 int
hashCode重写 hashCode()
          
 boolean
  Date
abstract   Date
  Object
 void
 void
setLenient指定日期/时间分析是否不严格。(boolean lenient)
          
 void
setNumberFormat允许用户设置数字 formatter。( NumberFormat newNumberFormat)
          
 void
 
1.5         GregorianCalendar
GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。
 
构造方法摘要
 
 
GregorianCalendar为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。(int year, int month, int dayOfMonth, int hourOfDay, int minute)
          
 
GregorianCalendar为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)
          
 
 
 
 
 
方法摘要
 void
  Object
protected  void
protected  void
 boolean
 int
 int
 int
  Date
 int
 int
 int
getTimeZone获得时区。()
          
 int
 boolean
isLeapYear确定给定的年份是否为闰年。(int year)
          
 void
 void
 void
 void
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值