JAVA(13)時間日期處理

時間日期

Date 類

  • Date 類表示系統(tǒng)特定的時間戳,可以精確到毫秒。
  • Date 對象表示時間的默認順序是星期、月、日、小時、分、秒、年。
  • Date類有兩種構(gòu)造方法
    1、 Date(): 此種形式表示分配 Date 對象并初始化此對象,以表示分配它的時間(精確到毫秒),使用該構(gòu)造方法創(chuàng)建的對象可以獲取本地的當(dāng)前時間。
    2、 Date(long date): 此種形式表示從 GMT 時間(格林尼治時間)1970 年 1 月 1 日 0 時 0 分 0 秒開始經(jīng)過參數(shù) date 指定的毫秒數(shù)。
Date date1=new Date();    //調(diào)用無參數(shù)構(gòu)造函數(shù)
System.out.println(date1.toString());    //輸出:Wed May 18 21:24:40 CST 2016
Date date2=new Date(60000);    //調(diào)用含有一個long類型參數(shù)的構(gòu)造函數(shù)
System.out.println(date2);    //輸出:Thu Jan 0108:01:00 CST 1970
  • Date 類的無參數(shù)構(gòu)造方法獲取的是系統(tǒng)當(dāng)前的時間,顯示的順序為星期、月、日、小時、分、秒、年。

  • Date 類帶 long 類型參數(shù)的構(gòu)造方法獲取的是距離 GMT 指定毫秒數(shù)的時間,60000 毫秒是一分鐘,而 GMT(格林尼治標(biāo)準(zhǔn)時間)與 CST(中央標(biāo)準(zhǔn)時間)相差 8 小時,也就是說 1970 年 1 月 1 日 00:00:00 GMT 與 1970 年 1 月 1 日 08:00:00 CST 表示的是同一時間。 因此距離 1970 年 1 月 1 日 00:00:00 CST 一分鐘的時間為 1970 年 1 月 1 日 00:01:00 CST,即使用 Date 對象表示為 Thu Jan 01 08:01:00 CST 1970。

表1 Date類中的常用方法

方法 描述
boolean after(Date when) 判斷此日期是否在指定日期之后
boolean before(Date when) 判斷此日期是否在指定日期之前
int compareTo(Date anotherDate) 比較兩個日期的順序
boolean equals(Object obj) 比較兩個日期的相等性
long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以來,此 Date 對象表示的毫秒數(shù)
String toString() 把此 Date 對象轉(zhuǎn)換為以下形式的 String: dow mon dd hh:mm:ss zzz yyyy。其中 dow 是一周中的某一天(Sun、Mon、Tue、Wed、Thu、Fri 及 Sat)

Calendar 類

  • Calendar 類是一個抽象類,它為特定瞬間與 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日歷字段之間的轉(zhuǎn)換提供了一些方法,并為操作日歷字段(如獲得下星期的日期) 提供了一些方法。
  • 創(chuàng)建 Calendar 對象不能使用 new 關(guān)鍵字,因為 Calendar 類是一個抽象類,但是它提供了一個 getInstance() 方法來獲得 Calendar類的對象。getInstance() 方法返回一個 Calendar 對象,其日歷字段已由當(dāng)前日期和時間初始化。
  • Calendar c = Calendar.getInstance();
方法 描述
void add(int field, int amount) 根據(jù)日歷的規(guī)則,為給定的日歷字段 field 添加或減去指定的時間量 amount
boolean after(Object when) 判斷此 Calendar 表示的時間是否在指定時間 when 之后,并返回判斷結(jié)果
boolean before(Object when) 判斷此 Calendar 表示的時間是否在指定時間 when 之前,并返回判斷結(jié)果
void clear() 清空 Calendar 中的日期時間值
int compareTo(Calendar anotherCalendar) 比較兩個 Calendar 對象表示的時間值(從格林威治時間 1970 年 01 月 01 日00 時 00 分 00 秒至現(xiàn)在的毫秒偏移量),大則返回 1,小則返回 -1,相等返回 0
int get(int field) 返回指定日歷字段的值
int getActualMaximum(int field) 返回指定日歷字段可能擁有的最大值
int getActualMinimum(int field) 返回指定日歷字段可能擁有的最小值
int getFirstDayOfWeek() 獲取一星期的第一天。根據(jù)不同的國家地區(qū),返回不同的值
static Calendar getInstance() 使用默認時區(qū)和語言壞境獲得一個日歷
static Calendar getInstance(TimeZone zone) 使用指定時區(qū)和默認語言環(huán)境獲得一個日歷
static Calendar getInstance(TimeZone zone,Locale aLocale) 使用指定時區(qū)和語言環(huán)境獲得一個日歷
Date getTime() 返回一個表示此 Calendar 時間值(從格林威治時間 1970 年 01 月 01 日 00 時 00 分 00 秒至現(xiàn)在的毫秒偏移量)的 Date 對象
long getTimeInMillis() 返回此 Calendar 的時間值,以毫秒為單位
void set(int field, int value) 為指定的日歷字段設(shè)置給定值
void set(int year, int month, int date) 設(shè)置日歷字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
void set(int year, int month, int date, int hourOfDay, int minute, int second) 設(shè)置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、 MINUTE 和 SECOND 的值
void setFirstDayOfWeek(int value) 設(shè)置一星期的第一天是哪一天
void setTimeInMillis(long millis) 用給定的 long 值設(shè)置此 Calendar 的當(dāng)前時間值
  • Calendar 對象可以調(diào)用 set() 方法將日歷翻到任何一個時間,當(dāng)參數(shù) year 取負數(shù)時表示公元前。Calendar 對象調(diào)用 get() 方法可以獲取有關(guān)年、月、日等時間信息,參數(shù) field 的有效值由 Calendar 靜態(tài)常量指定。

Calendar 類中定義了許多常量,分別表示不同的意義。
Calendar.YEAR:年份。
Calendar.MONTH:月份。
Calendar.DATE:日期。
Calendar.DAY_OF_MONTH:日期,和上面的字段意義完全相同。
Calendar.HOUR:12小時制的小時。
Calendar.HOUR_OF_DAY:24 小時制的小時。
Calendar.MINUTE:分鐘。
Calendar.SECOND:秒。
Calendar.DAY_OF_WEEK:星期幾。

Calendar calendar=Caiendar.getlnstance();    //如果不設(shè)置時間,則默認為當(dāng)前時間
caiendar.setTimefnew Date());    //將系統(tǒng)當(dāng)前時間賦值給 Calendar 對象
System.out.println("現(xiàn)在時刻:"+calendar.getTime());    //獲取當(dāng)前時間
int year=calendar.get(Calendar.YEAR);    //獲取當(dāng)前年份
System.out.println("現(xiàn)在是"+year+"年");
int month=calendar.get(Calendar.MONTH)+1;    //獲取當(dāng)前月份(月份從 0 開始,所以加 1)
System.out.print(month+"月");
int day=calendar.get(Calendar.DATE);    //獲取日
System.out.print(day+"日");
int week=calendar.get(Calendar.DAY_OF_WEEK)-1;    //獲取今天星期幾(以星期日為第一天)
System.out.print("星期"+week);
int hour=calendar.get(Calendar.HOUR_OF_DAY);    //獲取當(dāng)前小時數(shù)(24 小時制)
System.out.print(hour+"時");
int minute=calendar.get(Calendar.MINUTE);    //獲取當(dāng)前分鐘
System.out.print(minute+"分");
int second=calendar.get(Calendar.SECOND);    //獲取當(dāng)前秒數(shù)
System.out.print(second+"秒");
int millisecond=calendar.get(Calendar.MILLISECOND);    //獲取毫秒數(shù)
System.out.print(millisecond+"毫秒");
int dayOfMonth=calendar.get(Calendar.DAY_OF_MONTH);    //獲取今天是本月第幾天
System.out.println("今天是本月的第 "+dayOfMonth+" 天");
int dayOfWeekInMonth=calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);    //獲取今天是本月第幾周
System.out.println("今天是本月第 "+dayOfWeekInMonth+" 周");
int many=calendar.get(Calendar.DAY_OF_YEAR);    //獲取今天是今年第幾天
System.out.println("今天是今年第 "+many+" 天");
Calendar c=Calendar.getInstance();
c.set(2012/8/8);    //設(shè)置年月日,時分秒將默認采用當(dāng)前值
System.out.println("設(shè)置日期為 2012-8-8 后的時間:"+c.getTime());    //輸出時間

DateFormat 類

  • DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關(guān)的方式格式化并解析日期或時間。日期/時間格式化子類(如 SimpleDateFormat)允許進行格式化(也就是日期→文本)、解析(文本→日期)和標(biāo)準(zhǔn)化日期。
  • 在創(chuàng)建 DateFormat 對象時不能使用 new 關(guān)鍵字,而應(yīng)該使用 DateFormat 類中的靜態(tài)方法 getDateInstance(),示例代碼如下
  • DateFormat df = DateFormat.getDateInstance();
//獲取不同格式化風(fēng)格和中國環(huán)境的日期
DateFormat df1=DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA);
DateFormat df2=DateFormat.getDateInstance(DateFormat.FULL,Locale.CHINA);
DateFormat df3=DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA);
DateFormat df4=DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA);
//獲取不同格式化風(fēng)格和中國環(huán)境的時間
DateFormat df5=DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA);
DateFormat df6=DateFormat.getTimeInstance(DateFormat.FULL,Locale.CHINA);
DateFormat df7=DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA);
DateFormat df8=DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA);
//將不同格式化風(fēng)格的日期格式化為日期字符串
String date1=df1.format(new Date());
String date2=df2.format(new Date());
String date3=df3.format(new Date());
String date4=df4.format(new Date());
//將不同格式化風(fēng)格的時間格式化為時間字符串
String time1=df5.format(new Date());
String time2=df6.format(new Date());
String time3=df7.format(new Date());
String time4=df8.format(new Date());
//輸出日期
System.out.println("SHORT:"+date1+" "+time1);
System.out.println("FULL:"+date2+" "+time2);
System.out.println("MEDIUM:"+date3+" "+time3);
System.out.println("LONG:"+date4+" "+time4);

SimpleDateFormat 類

  • 如果使用 DateFormat 類格式化日期/時間并不能滿足要求,那么就需要使用 DateFormat 類的子類——SimpleDateFormat。

  • SimpleDateFormat 是一個以與語言環(huán)境有關(guān)的方式來格式化和解析日期的具體類,它允許進行格式化(日期→文本)、解析(文本→日期)和規(guī)范化。SimpleDateFormat 使得可以選擇任何用戶定義的日期/時間格式的模式。

  • SimpleDateFormat 類主要有如下 3 種構(gòu)造方法。
    1、 SimpleDateFormat():用默認的格式和默認的語言環(huán)境構(gòu)造 SimpleDateFormat。
    2、 SimpleDateFormat(String pattern):用指定的格式和默認的語言環(huán)境構(gòu)造 SimpleDateF ormat。
    3、 SimpleDateFormat(String pattern,Locale locale):用指定的格式和指定的語言環(huán)境構(gòu)造 SimpleDateF ormat。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 自從JDK 1.0開始,Java就提供了Date來處理時間和日期,作為老古董自然有很多東西是過時的。然后出現(xiàn)了Ca...
    湫水長天閱讀 2,151評論 0 16
  • 1、工具類 Java中提供了大量的類和接口完成特定的功能。每個類都會有自己的屬性和行為(功能)。但是這些功能還是不...
    Villain丶Cc閱讀 1,786評論 0 1
  • 一、Java中的日期概述 日期在Java中是一塊非常復(fù)雜的內(nèi)容,對于一個日期在不同的語言國別環(huán)境中,日期的國際化,...
    Liam大大閱讀 7,556評論 0 5
  • 1,今天我很豐盛。上午和最親愛的短暫的會面,又給我了很多的動力和信心,好的關(guān)系就像這樣,不斷地滋養(yǎng)著彼此,一起成長...
    daodaobai閱讀 300評論 0 1
  • 高考過后,有很多同學(xué)因發(fā)揮不正常,達不到預(yù)期期望的成績,會感覺痛苦,拒絕向外透露成績,這是源于一種羞恥感或內(nèi)疚感的...
    方圓fg閱讀 654評論 2 7

友情鏈接更多精彩內(nèi)容