Java日期和时间总结
时区:全球一共有24个时区,英国格林尼治是0时区,北京是东八区, 也就是说格林尼治凌晨1点,北京是早上9点.
时刻:所有计算机内部都用一个整数表示时刻,这个整数是距离格林尼治标准时间1970年1月1日0分0秒的毫秒数.
Java API 中关于日期和时间,有三个主要的类.
Date:表示时刻,即绝对时间,与年月日无关
Calender :表示年历,Calender是一个抽象类,其中表示公立的子类是Gregorian-Calender
DateFormate:表示格式化,能将日期和时间与字符串进行相互转换,DateFormate也是一个抽象类,其中最常用的子类是
SimpleDateFormate.
还有两个相关的类:
TimeZone:表示时区.
Locale: 表示国家(或地区)和语言
Calender类是日期和时间操作的主要类,它表示与TimeZone和Locale相关的日历信息,可以进行各种相关运算.它的内部组成
protected long time;//表示时刻的毫秒数
protected int fields[] //这个数组长度是17, 保存一个日期中各个字段的值,这些值都是静态变量如下:
Calender.Year:表示年
Calender.MONTH: 表示月
Calender.DAY_OF_MONTH: 表示日, 每月的第一天
Calender.HOUR_OF_DAY: 表示小时,为0-23
Calender.MINUTE :表示分钟
Calender.SECOND:表示秒
Calender.MILLISECOND:表示毫秒
Calender.DAY_OF_WEEK 表示星期几,周日是1,周一是2,周六是7.
Calender是抽象类,创建对象用静态方法,getInstance方法,会根据TimeZone和Local创建对应的Calender子类对象,在中文系统中
子类一般是表示公历的GregorianCalender.
getInstance方法封装了Carlender对象创建的细节.TimeZone和Locale不同,具体的子类可能不同,但都是Calender.这种隐藏对象创建细节的方式,是计算机程序中一种常见的设计模式,它有一个名字,就是工厂方法.
局限性
1.Date中的方法参数与常识不符合,过时方法容易被人忽略,产生误用
2.Carlender操作比较繁琐
3.DateFormate的线程安全性:不是线程安全的.
网友评论