Java日期時光應用辦法匯總。本站提示廣大學習愛好者:(Java日期時光應用辦法匯總)文章只能為提供參考,不一定能成為您想要的結果。以下是Java日期時光應用辦法匯總正文
1、Java中的日期概述
日期在Java中是一塊異常龐雜的內容,關於一個日期在分歧的說話國別情況中,日期的國際化,日期和時光之間的轉換,日期的加減運算,日期的展現格局都長短常龐雜的成績。
在Java中,操作日期重要觸及到一下幾個類:
1、java.util.Date
類 Date 表現特定的剎時,准確到毫秒。從 JDK 1.1 開端,應當應用 Calendar 類完成日期和時光字段之間轉換,應用 DateFormat 類來格局化和剖析日期字符串。Date 中的把日期說明為年、月、日、小時、分鐘和秒值的辦法已放棄。
2、java.text.DateFormat(籠統類)
DateFormat 是日期/時光格局化子類的籠統類,它以與說話有關的方法格局化並剖析日期或時光。日期/時光格局化子類(如 SimpleDateFormat)許可停止格局化(也就是日期 -> 文本)、剖析(文本-> 日期)和尺度化。將日期表現為 Date 對象,或許表現為從 GMT(格林尼治本准時光)1970 年,1 月 1 日 00:00:00 這一刻開端的毫秒數。
3、java.text.SimpleDateFormat(DateFormat的直接子類)
SimpleDateFormat 是一個以與說話情況相干的方法來格局化和剖析日期的詳細類。它許可停止格局化(日期 -> 文本)、剖析(文本 -> 日期)和標准化。
SimpleDateFormat 使得可以選擇任何用戶界說的日期-時光格局的形式。然則,依然建議經由過程 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 來新的創立日期-時光格局化法式。
4、java.util.Calendar(籠統類)
Calendar 類是一個籠統類,它為特定剎時與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日歷字段之間的轉換供給了一些辦法,並為操作日歷字段(例如取得下禮拜的日期)供給了一些辦法。剎時可用毫秒值來表現,它是距歷元(即格林威治本准時光 1970 年 1 月 1 日的 00:00:00.000,格裡高利歷)的偏移量。
與其他說話情況敏感類一樣,Calendar 供給了一個類辦法 getInstance,以取得此類型的一個通用的對象。Calendar 的 getInstance 辦法前往一個 Calendar 對象,其日歷字段已由以後日期和時光初始化。
5、java.util.GregorianCalendar(Calendar的直接子類)
GregorianCalendar 是 Calendar 的一個詳細子類,供給了世界上年夜多半國度應用的尺度日歷體系。
GregorianCalendar 是一種混雜日歷,在單一連續性的支撐下同時支撐儒略歷和格裡高利歷體系,在默許情形下,它對應格裡高利日歷創建時的格裡高利歷日期(某些國度是在 1582 年 10 月 15 日創建,在其他國度要晚一些)。可由挪用方經由過程挪用 setGregorianChange() 來更改肇端日期。
2、java.util.Date的應用
1、java.util.Date的API簡介
類 java.util.Date 表現特定的剎時,准確到毫秒。供給了許多的辦法,然則許多曾經過時,不推舉應用,上面僅僅列出沒有過時的辦法:
結構辦法摘要
-------------
Date()
分派 Date 對象並用以後時光初始化此對象,以表現分派它的時光(准確到毫秒)。
Date(long date)
分派 Date 對象並初始化此對象,以表現自從尺度基准時光(稱為“歷元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以來的指定毫秒數。
辦法摘要
-------------
boolean after(Date when)
測試此日期能否在指定日期以後。
boolean before(Date when)
測試此日期能否在指定日期之前。
Object clone()
前往此對象的正本。
int compareTo(Date anotherDate)
比擬兩個日期的次序。
boolean equals(Object obj)
比擬兩個日期的相等性。
long getTime()
前往自 1970 年 1 月 1 日 00:00:00 GMT 以來此 Date 對象表現的毫秒數。
int hashCode()
前往此對象的哈希碼值。
void setTime(long time)
設置此 Date 對象,以表現 1970 年 1 月 1 日 00:00:00 GMT 今後 time 毫秒的時光點。
String toString()
把此 Date 對象轉換為以下情勢的 String: dow mon dd hh:mm:ss zzz yyyy 個中:
dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
mon 是月份 (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)。
dd 是一月中的某一天(01 至 31),顯示為兩位十進制數。
hh 是一天中的小時(00 至 23),顯示為兩位十進制數。
mm 是小時中的分鐘(00 至 59),顯示為兩位十進制數。
ss 是分鐘中的秒數(00 至 61),顯示為兩位十進制數。
zzz 是時區(並可以反應夏令時)。尺度時區縮寫包含辦法 parse 辨認的時區縮寫。假如不供給時區信息,則 zzz 為空,即基本不包含任何字符。
yyyy 是年份,顯示為 4 位十進制數。
上面是一個Date類的綜合實例:
public class TestDate { public static void main(String[] args) { TestDate testdate = new TestDate(); testdate.getSystemCurrentTime(); testdate.getCurrentDate(); } /** * 獲得體系以後時光 * System.currentTimeMillis()前往體系以後時光,成果為1970年1月1日0時0分0秒開端,到法式履行獲得體系時光為止所經由的毫秒數 * 1秒=1000毫秒 */ public void getSystemCurrentTime(){ System.out.println("---獲得體系以後時光---"); System.out.println(System.currentTimeMillis()); } public void getCurrentDate(){ System.out.println("---獲得體系以後時光---"); //創立並初始化一個日期(初始值為以後日期) Date date = new Date(); System.out.println("如今的日期是 = " + date.toString()); System.out.println("自1970年1月1日0時0分0秒開端至今所閱歷的毫秒數 = " + date.getTime()); } }
2、java.text.DateFormat籠統類的應用
DateFormat 是日期/時光格局化子類的籠統類,它以與說話有關的方法格局化並剖析日期或時光。日期/時光格局化子類(如 SimpleDateFormat)許可停止格局化(也就是日期 -> 文本)、剖析(文本-> 日期)和尺度化。將日期表現為 Date 對象,或許表現為從 GMT(格林尼治本准時光)1970 年,1 月 1 日 00:00:00 這一刻開端的毫秒數。
DateFormat 供給了許多類辦法,以取得基於默許或給定說話情況和多種格局化作風的默許日期/時光 Formatter。格局化作風包含 FULL、LONG、MEDIUM 和 SHORT。辦法描寫中供給了應用這些作風的更多細節和示例。
DateFormat 可贊助停止格局化並剖析任何說話情況的日期。關於月、禮拜,乃至日歷格局(陰歷和陽歷),其代碼可完整與說話情況的商定有關。
要格局化一個以後說話情況下的日期,可以使用某個靜態工場辦法:
myString = DateFormat.getDateInstance().format(myDate);
假如格局化多個日期,那末取得該格局並屢次應用它是更加高效的做法,如許體系就不用屢次獲得有關情況說話和國度商定的信息了。
DateFormat df = DateFormat.getDateInstance(); for (int i = 0; i < myDate.length; ++i) { output.println(df.format(myDate[i]) + "; "); }
要格局化分歧說話情況的日期,可在 getDateInstance() 的挪用中指定它。
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
還可以使用 DateFormat 停止剖析。
myDate = df.parse(myString);
應用 getDateInstance 來取得該國度的尺度日期格局。別的還供給了一些其他靜態工場辦法。應用 getTimeInstance 可取得該國度的時光格局。應用 getDateTimeInstance 可取得日期和時光格局。可以將分歧選項傳入這些工場辦法,以掌握成果的長度(從 SHORT 到 MEDIUM 到 LONG 再到 FULL)。確實的成果取決於說話情況,然則平日:
SHORT 完整為數字,如 12.13.52 或 3:30pm
MEDIUM 較長,如 Jan 12, 1952
LONG 更長,如 January 12, 1952 或 3:30:32pm
FULL 是完整指定,如 Tuesday, April 12, 1952 AD 或 3:30:42pm PST。
假如情願,還可以在格局上設置時區。假如想對格局化或剖析施加更多的掌握(或許賜與用戶更多的掌握),可以測驗考試將從工場辦法所取得的 DateFormat 強迫轉換為 SimpleDateFormat。這實用於年夜多半國度;只是要記住將其放入一個 try 代碼塊中,以防碰到特別的格局。
還可使用借助 ParsePosition 和 FieldPosition 的剖析和格局化辦法情勢來:慢慢地剖析字符串的各部門。 對齊隨意率性特定的字段,或許找出字符串在屏幕上的選擇地位。
DateFormat 不是同步的。建議為每一個線程創立自力的格局實例。假如多個線程同時拜訪一個格局,則它必需堅持內部同步。
3、java.text.SimpleDateFormat(DateFormat的直接子類)的應用
SimpleDateFormat 是一個以與說話情況相干的方法來格局化和剖析日期的詳細類。它許可停止格局化(日期 -> 文本)、剖析(文本 -> 日期)和標准化。
SimpleDateFormat 使得可以選擇任何用戶界說的日期-時光格局的形式。然則,依然建議經由過程 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 來新的創立日期-時光格局化法式。每個如許的類辦法都可以或許前往一個以默許格局形式初始化的日期/時光格局化法式。可以依據須要應用 applyPattern 辦法來修正格局形式。有關應用這些辦法的更多信息,請參閱 DateFormat。
日期和時光形式
日期和時光格局由日期和時光形式 字符串指定。在日期和時光形式字符串中,未加引號的字母 'A' 到 'Z' 和 'a' 到 'z' 被說明為形式字母,用來表現日期或時光字符串元素。文本可使用單引號 (') 惹起來,以避免停止說明。"''" 表現單引號。一切其他字符均不說明;只是在格局化時將它們簡略復制到輸入字符串,或許在剖析時與輸出字符串停止婚配。
更多的參考信息可以檢查JDK API文檔,上面給出一個綜合實例:
public class TestDateFormat { public static void main(String[] args) throws ParseException { TestDateFormat tdf = new TestDateFormat(); tdf.dateFormat(); } /** * 對SimpleDateFormat類停止測試 * @throws ParseException */ public void dateFormat() throws ParseException{ //創立日期 Date date = new Date(); //創立分歧的日期格局 DateFormat df1 = DateFormat.getInstance(); DateFormat df2 = new SimpleDateFormat("yyyy-MM-01 hh:mm:ss EE"); DateFormat df3 = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA); //發生一個指定國度指定長度的日期格局,長度分歧,顯示的日期完全性也分歧 DateFormat df4 = new SimpleDateFormat("yyyy年MM月dd日 hh時mm分ss秒 EE", Locale.CHINA); DateFormat df5 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss EEEEEE", Locale.US); DateFormat df6 = new SimpleDateFormat("yyyy-MM-dd"); //將日期依照分歧格局停止輸入 System.out.println("-------將日期依照分歧格局停止輸入------"); System.out.println("依照Java默許的日期格局,默許的區域 : " + df1.format(date)); System.out.println("依照指定格局 yyyy-MM-dd hh:mm:ss EE ,體系默許區域 :" + df2.format(date)); System.out.println("依照日期的FULL形式,區域設置為中文 : " + df3.format(date)); System.out.println("依照指定格局 yyyy年MM月dd日 hh時mm分ss秒 EE ,區域為中文 : " + df4.format(date)); System.out.println("依照指定格局 yyyy-MM-dd hh:mm:ss EE ,區域為美國 : " + df5.format(date)); System.out.println("依照指定格局 yyyy-MM-dd ,體系默許區域 : " + df6.format(date)); //將相符該格局的字符串轉換為日期,若格局不相配,則會失足 Date date1 = df1.parse("16-01-24 下晝2:32"); Date date2 = df2.parse("2016-01-24 02:51:07 禮拜日"); Date date3 = df3.parse("2016年01月24日 禮拜五"); Date date4 = df4.parse("2016年01月24日 02時51分18秒 禮拜日"); Date date5 = df5.parse("2016-01-24 02:51:18 Sunday"); Date date6 = df6.parse("2016-01-24"); System.out.println("-------輸入將字符串轉換為日期的成果------"); System.out.println(date1); System.out.println(date2); System.out.println(date3); System.out.println(date4); System.out.println(date5); System.out.println(date6); } }
4、java.util.Calendar(籠統類)
java.util.Calendar是個籠統類,是體系時光的籠統表現,它為特定剎時與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日歷字段之間的轉換供給了一些辦法,並為操作日歷字段(例如取得下禮拜的日期)供給了一些辦法。剎時可用毫秒值來表現,它是距歷元(即格林威治本准時光 1970 年 1 月 1 日的 00:00:00.000,格裡高利歷)的偏移量。
與其他說話情況敏感類一樣,Calendar 供給了一個類辦法 getInstance,以取得此類型的一個通用的對象。Calendar 的 getInstance 辦法前往一個 Calendar 對象,其日歷字段已由以後日期和時光初始化。
一個Calendar的實例是體系時光的籠統表現,從Calendar的實例可以曉得年代日禮拜月份時區等信息。Calendar類中有一個靜態辦法get(int x),經由過程這個辦法可以獲得到相干實例的一些值(年代日禮拜月份等)信息。參數x是一個產量值,在Calendar中有界說。
Calendar中些圈套,很輕易失落下去:
1、Calendar的禮拜是從周日開端的,常量值為0。
2、Calendar的月份是從一月開端的,常量值為0。
3、Calendar的每一個月的第一天值為1。
5、java.util.GregorianCalendar(Calendar的直接子類)
GregorianCalendar 是 Calendar 的一個詳細子類,供給了世界上年夜多半國度應用的尺度日歷體系。聯合Calendar籠統類應用。
上面給出一個綜合實例看看Calendar類的用法:
public class TestCalendar { public static void main(String[] args) throws ParseException { TestCalendar testCalendar = new TestCalendar(); testCalendar.testCalendar(); testCalendar.testCalendar2(); } public void testCalendar(){ //創立Calendar的方法 Calendar now1 = Calendar.getInstance(); Calendar now2 = new GregorianCalendar(); Calendar now3 = new GregorianCalendar(2016, 01, 24); Calendar now4 = new GregorianCalendar(2016, 01, 24, 15, 55); //圈套:Calendar的月份是0~11 Calendar now5 = new GregorianCalendar(2016, 01, 24, 15, 55, 44); Calendar now6 = new GregorianCalendar(Locale.US); Calendar now7 = new GregorianCalendar(TimeZone.getTimeZone("GMT-8:00")); //經由過程日期和毫秒數設置Calendar now2.setTime(new Date()); System.out.println(now2); now2.setTimeInMillis(new Date().getTime()); System.out.println(now2); //界說日期的中文輸入格局,並輸入日期 SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日 hh時mm分ss秒 E", Locale.CHINA); System.out.println("獲得日期中文格局化化輸入:" + df.format(now5.getTime())); System.out.println(); System.out.println("--------經由過程Calendar獲得日期中年代日等相干信息--------"); System.out.println("獲得年:" + now5.get(Calendar.YEAR)); System.out.println("獲得月(月份是從0開端的):" + now5.get(Calendar.MONTH)); System.out.println("獲得日:" + now5.get(Calendar.DAY_OF_MONTH)); System.out.println("獲得時:" + now5.get(Calendar.HOUR)); System.out.println("獲得分:" + now5.get(Calendar.MINUTE)); System.out.println("獲得秒:" + now5.get(Calendar.SECOND)); System.out.println("獲得上午、下晝:" + now5.get(Calendar.AM_PM)); System.out.println("獲得禮拜數值(禮拜是從周日開端的):" + now5.get(Calendar.DAY_OF_WEEK)); System.out.println(); System.out.println("---------通用禮拜中文明轉換---------"); String dayOfWeek[] = {"", "日", "一", "二", "三", "四", "五", "六"}; System.out.println("now5對象的禮拜是:" + dayOfWeek[now5.get(Calendar.DAY_OF_WEEK)]); System.out.println(); System.out.println("---------通用月份中文明轉換---------"); String months[] = {"一月", "二月", "三月", "四月", "蒲月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"}; System.out.println("now5對象的月份是: " + months[now5.get(Calendar.MONTH)]); } public void testCalendar2() throws ParseException{ //獲得以後月份的最年夜天數 Calendar cal = Calendar.getInstance(); int maxday=cal.getActualMaximum(Calendar.DAY_OF_MONTH); int minday=cal.getActualMinimum(Calendar.DAY_OF_MONTH); System.out.println(maxday); //取當月的最初一天 DateFormat formatter3=new SimpleDateFormat("yyyy-MM-"+maxday); System.out.println(formatter3.format(cal.getTime())); //取當月的最初一天 DateFormat formatter4=new SimpleDateFormat("yyyy-MM-"+minday); System.out.println(formatter4.format(cal.getTime())); //求兩個日期之間相隔的天數 java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd"); java.util.Date beginDate= format.parse("2007-12-24"); java.util.Date endDate= format.parse("2007-12-25"); long day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000); System.out.println("相隔的天數="+day); //一年前的日期 java.text.Format formatter5=new java.text.SimpleDateFormat("yyyy-MM-dd"); java.util.Date todayDate=new java.util.Date(); long beforeTime=(todayDate.getTime()/1000)-60*60*24*365; todayDate.setTime(beforeTime*1000); String beforeDate=formatter5.format(todayDate); System.out.println(beforeDate); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.YEAR, -1); System.out.println(formatter5.format(calendar.getTime())); //以後禮拜的禮拜一和禮拜日 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); GregorianCalendar gregorianCalendar = new GregorianCalendar(); int dayInWeek = gregorianCalendar.get(Calendar.DAY_OF_WEEK); int offset = 0; if (dayInWeek == 1) { // 禮拜天 offset = 6; } else { // 禮拜一至禮拜六 offset = dayInWeek - 2; } gregorianCalendar.add(GregorianCalendar.DAY_OF_MONTH, -offset); String sday = dateFormat.format(gregorianCalendar.getTime()); gregorianCalendar.add(GregorianCalendar.DAY_OF_MONTH, 6); String eday = dateFormat.format(gregorianCalendar.getTime()); System.out.println("這個禮拜的禮拜一:" + sday); System.out.println("這個禮拜的禮拜天:" + eday); } }
3、總結
Java中日期的常常有一下五個方面:
1、創立日期
2、日期格局化顯示
3、日期的轉換(重要是和字符串之間的互相轉換)
4、日期中年、月、日、時、分、秒、禮拜、月份等獲得。
5、日期的年夜小比擬、日期的加減。
以上就是為年夜家總結的java日期時光應用辦法,願望對年夜家的進修有所贊助。