不得不吐槽一下Java的日期处理。太不爽了。
基本概念
UTC:世界标准时间。
UT:UTC在科学上的简称。
GMT:格林威治时间。
UTC,UT,GMT 其实是同一个概念。
一. Date (日期类)
Date类中许多方法都已经过时了。只有少数方法还能使用。
二. DataFormat与SimpleDateFormat (日期格式类)
Java的日期格式化处理类位于java.text包中。
1. DataFormat
DataFormat是一个抽象类。
2. SimpleDateFormat
SimpleDateFormat类继承自DataFormat类。该类用于处理日期格式化。
SimpleDateFormat实例表示一种“日期格式”。
其构造方法:
SimpleDateFormat() SimpleDateFormat(String pattern) SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols) SimpleDateFormat(String pattern, Locale locale) |
例:创建“2012年12月12日” 的日期格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
3. 常用方法
(1) 将日期格式化为字符串
format方法
该方法用于将Date对象转为当前格式的字符串。该方法在DataFormat类与SimpleDataFormat类中均有定义。
例:
Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); String datestr = sdf.format(date); System.out.println(datestr);
(2) 将字符串解析为日期
parse方法
从给定字符串的开始解析文本,以生成一个日期。
例:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); Date date = sdf.parse("2012年12月12日"); System.out.println(date);
三. Calendar(日历类)
Calendar是抽象类。
Calendar类有许多实现的子类。常用的子类如GregorianCalendar。
GregorianCalendar:格林威治格式的日历,该日历可以用于表示各个时区的日历。
1. 得到Calendar实例
Calender类提供了一个静态方法getInstance,以获得此类型的一个通用的对象。
static Calendar getInstance() static Calendar getInstance(Locale aLocale) static Calendar getInstance(TimeZone zone) static Calendar getInstance(TimeZone zone, Locale aLocale) |
该方法用于得到当前时刻的Calendar实例。 可以通过Locale,TimeZone参数而获得某个时区的此刻的Calendar实例
|
例:
Calendar calendar = Calendar.getInstance();
或者可以使用Calendar的子类实现得到一个Calendar实例。
例:
Calendar calendar = new GregorianCalendar();
2. Calender的set和get
(1) set方法
void set(int field, int value)
将给定的日历字段设置为给定值。
void set(int year, int month, int date)
设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。
void set(int year, int month, int date, int hourOfDay, int minute)
设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。
void set(int year, int month, int date, int hourOfDay, int minute, int second)
设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。
(2) get方法
int get(int field)
返回给定日历字段的值。
(3) set/get方法中的field的意义:
field都是Calendar类中定义的静态变量。
Calendar静态变量 |
意义 | Calendar静态变量 | 意义 |
YEAR MONTH DATE HOUR MINUTE SECOND MILLISECOND WEEK_OF_MONTH WEEK_OF_YEAR |
年 月 日 小时 分钟 秒 毫秒 某月的周 某年的周 |
DAY_OF_MONTH DAY_OF_WEEK DAY_OF_WEEK_IN_MONTH DAY_OF_YEAR
HOUR_OF_DAY ERA ZONE_OFFSET DST_OFFSET |
|
3. Calender类与Date类
(1) Calender实例取得Date对象
Date getTime() 返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。
例:对Calendar实例指定日期
Date date=calendar.getTime();
(2) Calendar实例设置指定的Date对象
void setTime(Date date) 使用给定的 Date 设置此 Calendar 的时间。
例:设置指定的date 。
calendar.setTime(date);
4. 时间计算
Calender对象的方法 | 方法意义 |
void add(int field,int amount) void roll(int field,boolean up) void roll(int field,int amount) |
根据日历的规则,为给定的日历字段添加或减去指定的时间量。 在给定的时间字段上添加或减去单个时间单元,不更改更大的字段。 向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。 |
四. java.sql.Date、java.sql.Time、java.sql.Timestamp (数据库日期类)
java.sql.Date,java.sql.Time,java.sql.Timestamp 都继承于java.util.Date 。
java.sql.Date用于数据库中的日期处理,该类只表示了java.util.Date的日期部分。
java.sql.Time用于数据库中的时间处理,该类只表示了java.util.Date的时间部分。
java.sql.Timestamp类表示数据库中时间戳的数据,该类的实例包含日期也包含时间。
说明:
java.sql.Date、java.sql.Time、java.sql.Timestamp都是java.util.Date的子类。所以,所以对java.util.Date类的处理方法,这三个类的实例都可以使用。
五. TimeZone(时区类)
TimeZone类用于表示时区。
1. 取得一个时区实例
static TimeZone getTimeZone(String ID)
ID,表示地区的ID。
例:获取日本的日历对象。日本的ID为“Japan” 。
TimeZone tz = TimeZone.getTimeZone("Japan"); Calendar jpcalendar = new GregorianCalender(tz);
2. 获取已定义的ID
static String[] getAvailableIDs()
获取受支持的所有可用 ID。
static String[] getAvailableIDs(int rawOffset)
根据给定的时区偏移量(以毫秒为单位)获取可用的 ID。
例:获取所有已定义的ID
for(String str : TimeZone.getAvailableIDs){ System.out.println(str); }