JDK1.8之前日期時間類

JDK1.8之前日期時間類

1 java。lang。System類

System類提供的public static long currentTimeMillis()用來返回當前時間與1970年1月1日0時0分0秒GMT之間以毫秒為單位的時間差。此方法適於計算時間差。

2 java。util。Date

它的物件表示一個特定的瞬間,精確到毫秒。

Java中時間的表示說白了也是數字,是從標準紀元1970年1月1日0時0分0秒GMT到某個時刻的毫秒數,型別是long

理解:一維的時間軸,選擇1970年1月1日0時0分0秒時間為0刻度,1毫秒一刻度

構造方法:

l Date(): 原始碼:this(System。currentTimeMillis());

l Date(long date)

常用方法:

l getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以來此 Date 物件表示的毫秒數。

l toString():把此 Date 物件轉換為以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中:

dow 是一週中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat), zzz是時間標準。

已過時的方法:

l public Date(int year,int month,int date,int hrs,int min,int sec)

引數:

year - 見 1900 的年份。

month - 0-11 之間的月份。

date - 一月中 1-31 之間的某一天。

hrs - 0-23 之間的小時數。

min - 0-59 之間的分鐘數。

sec - 0-59 之間的秒數。

l getYear() 從 JDK 1。1 開始,由 Calendar。get(Calendar。YEAR) - 1900 取代。

l getMonth()從 JDK 1。1 開始,由 Calendar。get(Calendar。MONTH) 取代。返回的值在 0 和 11 之間,值 0 表示 1 月。

l getDate() JDK 1。1 開始,由 Calendar。get(Calendar。DAY_OF_MONTH) 取代。返回的值在 1 和 31 之間

l getDay()從 JDK 1。1 開始,由 Calendar。get(Calendar。DAY_OF_WEEK) 取代。 返回值 (0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday) 表示一週中的某一天

l getHours()從 JDK 1。1 開始,由 Calendar。get(Calendar。HOUR_OF_DAY) 取代。返回值是一個數字(0 至 23)

l getMinutes()從 JDK 1。1 開始,由 Calendar。get(Calendar。MINUTE) 取代。 返回值在 0 和 59 之間。

l getSeconds()從 JDK 1。1 開始,由 Calendar。get(Calendar。SECOND) 取代。回的值在 0 和 61 之間。值 60 和 61 只可能發生在考慮了閏秒的 Java 虛擬機器上。

3 java。util。TimeZone和Locale

Locale 物件表示了特定的地理、政治和文化地區。需要 Locale 來執行其任務的操作稱為語言環境敏感的 操作,它使用 Locale 為使用者量身定製資訊。例如,顯示一個數值,日期就是語言環境敏感的操作,應該根據使用者的國家、地區或文化的風俗/傳統來格式化該數值。

獲取Locale物件:

Locale(String language)

Locale(String language, String country)

Locale。CHINA、Locale。US等

public static void main(String[] args) {Locale loc = Locale。CHINA;System。out。println(loc);//zh_CNSystem。out。println(Locale。US);//en_USSystem。out。println(Locale。JAPAN);//ja_JPLocale c = new Locale(“zh”,“CN”);System。out。println(c);}

通常,使用

TimeZone的getDefault 獲取 TimeZone,getDefault 基於程式執行所在的時區建立 TimeZone。例如,對於在日本執行的程式,getDefault 基於日本標準時間建立 TimeZone 物件。

也可以用TimeZone的 getTimeZone 及時區 ID 獲取 TimeZone 。例如美國太平洋時區的時區 ID 是 “America/Los_Angeles”。因此,可以使用下面語句獲得美國太平洋時間 TimeZone 物件:

TimeZone tz = TimeZone。getTimeZone(“America/Los_Angeles”);

public static void main(String[] args) {TimeZone t = TimeZone。getDefault();System。out。println(t);TimeZone t1 = TimeZone。getTimeZone(“America/New_York”);System。out。println(t1);TimeZone t2 = TimeZone。getTimeZone(“Asia/Shanghai”);System。out。println(t2);}

String[] all = TimeZone。getAvailableIDs();for (String id : all) {System。out。println(id);}

4 java。util。Calendar

Calendar 類是一個抽象類,它為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日曆欄位之間的轉換提供了一些方法,併為操作日曆欄位(例如獲得下星期的日期)提供了一些方法。瞬間可用毫秒值來表示,它是距曆元(即格林威治標準時間 1970 年 1 月 1 日的 00:00:00。000,格里高利曆)的偏移量。

人們對於時間的認識是:某年某月某日,這樣的日期概念。計算機是long型別的數字。透過Calendar在二者之間搭起橋樑。而且Calendar提供了很多關於日期時間計算的方法。

JDK1.8之前日期時間類

GregorianCalendar(公曆)是Calendar的一個具體子類,提供了世界上大多數國家/地區使用的標準日曆系統。

注意:

月份:一月是0,二月是1,以此類推,12月是11

星期:週日是1,週二是2,。。。。週六是7

JDK1.8之前日期時間類

//預設語言環境的時間(時區)Calendar c = new GregorianCalendar();/** java。util。GregorianCalendar[* time=1480667849712,* areFieldsSet=true,* areAllFieldsSet=true,* lenient=true,* zone=sun。util。calendar。ZoneInfo[id=“Asia/Shanghai”,offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],* firstDayOfWeek=1,* minimalDaysInFirstWeek=1,* ERA=1,* YEAR=2016,* MONTH=11,* WEEK_OF_YEAR=49,//本年第49周* WEEK_OF_MONTH=1,//本月第1周* DAY_OF_MONTH=2,* DAY_OF_YEAR=337,//本年第337天* DAY_OF_WEEK=6,* DAY_OF_WEEK_IN_MONTH=1,* AM_PM=1, //下午* HOUR=4,* HOUR_OF_DAY=16, //HOUR是12小時制, HOUR_OF_DAY是24小時制* MINUTE=37,* SECOND=29,* MILLISECOND=712,* ZONE_OFFSET=28800000,* DST_OFFSET=0]*/

public static void main(String[] args) {//預設語言環境的時間(時區)Calendar c = new GregorianCalendar();int year=c。get(Calendar。YEAR);int month=c。get(Calendar。MONTH);int date=c。get(Calendar。DAY_OF_MONTH);int hour=c。get(Calendar。HOUR_OF_DAY);int minute=c。get(Calendar。MINUTE);int second=c。get(Calendar。SECOND);int mill=c。get(Calendar。MILLISECOND);int week=c。get(Calendar。DAY_OF_WEEK);StringBuffer dateStr=new StringBuffer();dateStr。append(year)。append(“年”);dateStr。append(month+1)。append(“月”);dateStr。append(date)。append(“日”)。append(“ ”);dateStr。append(hour)。append(“時”);dateStr。append(minute)。append(“分”);dateStr。append(second)。append(“秒”);dateStr。append(mill)。append(“毫秒”)。append(“ ”);String[] weeks={“日”,“一”,“二”,“”,“四”,“五”,“六”};dateStr。append(“星期”)。append(weeks[week-1]);System。out。println(dateStr);}

public static void main(String[] args) {Calendar c = new GregorianCalendar(2015, 6, 13);// c。set(2016, Calendar。DECEMBER, 4, 12, 12, 0);// c。setTime(new Date());//15天之後//c。add(Calendar。DATE, 15);//2個月之前//c。add(Calendar。DAY_OF_MONTH, -2);//12小時之後c。add(Calendar。HOUR, 12);Date time = c。getTime();//轉成日期System。out。println(time);}

public static

Calendar getInstance()使用預設時區和語言環境獲得一個日曆。返回的 Calendar 基於當前時間,使用了預設時區和預設語言環境。

public static Calendar getInstance(TimeZone zone, Locale aLocale)使用指定時區和語言環境獲得一個日曆。返回的 Calendar 基於當前時間,使用了給定的時區和給定的語言環境。

public static void main(String[] args) {Calendar c = Calendar。getInstance();System。out。println(c);Calendar c2 = Calendar。getInstance(TimeZone。getTimeZone(“Asia/Shanghai”), Locale。CHINA);System。out。println(c2);Calendar c3 = Calendar。getInstance(TimeZone。getTimeZone(“America/New_York”), Locale。US);System。out。println(c3);}

5 java。text。DateFormat和SimpleDateFormat

完成字串和時間物件的轉化:

l String format(date)

l Date parse(string)

public static void main(String[] args) {Date date = new Date();SimpleDateFormat sf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss 是本年的第幾D”);System。out。println(sf。format(date));String s = “2016-12-01 14:12:23”;SimpleDateFormat sf2 = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);try {Date d = sf2。parse(s);System。out。println(d);} catch (ParseException e) {e。printStackTrace();}}

JDK1.8之前日期時間類

往期精彩內容:

Java異常處理的概述

java異常體系結構

JavaEE自定義異常

JavaEE異常處理機制

java 列舉的定義與用法