Java日期处理

不得不吐槽一下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);
}

 

 

 

 

 

 

 

你可能感兴趣的:(java)