日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

5、时间日期的处理:Java Date类、Calendar类详解

發(fā)布時(shí)間:2025/3/20 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5、时间日期的处理:Java Date类、Calendar类详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在 Java 中獲取當(dāng)前時(shí)間,可以使用 java.util.Date 類和 java.util.Calendar 類完成。其中,Date 類主要封裝了系統(tǒng)的日期和時(shí)間的信息,Calendar 類則會(huì)根據(jù)系統(tǒng)的日歷來(lái)解釋 Date 對(duì)象。下面詳細(xì)介紹這兩個(gè)類的具體使用。

Date 類

Date 類表示系統(tǒng)特定的時(shí)間戳,可以精確到毫秒。Date 對(duì)象表示時(shí)間的默認(rèn)順序是星期、月、日、小時(shí)、分、秒、年。

1. 構(gòu)造方法

Date 類有如下兩個(gè)構(gòu)造方法。

  • Date():此種形式表示分配 Date
    對(duì)象并初始化此對(duì)象,以表示分配它的時(shí)間(精確到毫秒),使用該構(gòu)造方法創(chuàng)建的對(duì)象可以獲取本地的當(dāng)前時(shí)間。
  • Date(long date):此種形式表示從 GMT 時(shí)間(格林尼治時(shí)間)1970 年 1 月 1 日 0 時(shí) 0 分 0
    秒開(kāi)始經(jīng)過(guò)參數(shù) date 指定的毫秒數(shù)。

這兩個(gè)構(gòu)造方法的使用示例如下:

Date date1 = new Date(); // 調(diào)用無(wú)參數(shù)構(gòu)造函數(shù) System.out.println(date1.toString()); // 輸出:Wed May 18 21:24:40 CST 2016 Date date2 = new Date(60000); // 調(diào)用含有一個(gè)long類型參數(shù)的構(gòu)造函數(shù) System.out.println(date2); // 輸出:Thu Jan 0108:01:00 CST 1970

Date 類的無(wú)參數(shù)構(gòu)造方法獲取的是系統(tǒng)當(dāng)前的時(shí)間,顯示的順序?yàn)樾瞧凇⒃隆⑷铡⑿r(shí)、分、秒、年。

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

2. 常用方法

Date 類提供了許多與日期和事件相關(guān)的方法,其中常見(jiàn)的方法如表 1 所示。

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

例 1
下面使用一個(gè)實(shí)例來(lái)具體演示 Date 類的使用。假設(shè),某一天特定時(shí)間要去做一件事,而且那個(gè)時(shí)間已經(jīng)過(guò)去一分鐘之后才想起來(lái)這件事還沒(méi)有辦,這時(shí)系統(tǒng)將會(huì)提示已經(jīng)過(guò)去了多 長(zhǎng)時(shí)間。具體的代碼如下:

import java.util.Date; import java.util.Scanner; public class Test {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("請(qǐng)輸入要做的事情:");String title = input.next();Date date1 = new Date(); // 獲取當(dāng)前日期System.out.println("[" + title + "] 這件事發(fā)生時(shí)間為:" + date1);try {Thread.sleep(60000);// 暫停 1 分鐘} catch (InterruptedException e) {e.printStackTrace();}Date date2 = new Date();System.out.println("現(xiàn)在時(shí)間為:" + date2);if (date2.before(date1)) {System.out.println("你還有 " + (date2.getTime() - date1.getTime()) / 1000 + " 秒需要去完成【" + title + "】這件事!");} else {System.out.println("【" + title + "】事情已經(jīng)過(guò)去了 " + (date2.getTime() - date1.getTime()) / 1000 + " 秒");}} }

在該程序中,分別使用 Date 類的無(wú)參數(shù)構(gòu)造方法創(chuàng)建了兩個(gè) Date 對(duì)象。在創(chuàng)建完第一個(gè) Date 對(duì)象后,使用 Thread.sleep() 方法讓程序休眠 60 秒,然后再創(chuàng)建第二個(gè) Date 對(duì)象,這樣第二個(gè) Date 對(duì)象所表示的時(shí)間將會(huì)在第一個(gè) Date 對(duì)象所表示時(shí)間之后,因此“date2.before(date1)”條件表達(dá)式不成立,從而執(zhí)行 else 塊中的代碼,表示事情已經(jīng)發(fā)生過(guò)。

運(yùn)行該程序,執(zhí)行結(jié)果如下所示。

請(qǐng)輸入要做的事情: 收快遞 【收快遞】這件事發(fā)生時(shí)間為:Fri Oct 12 11:11:07 CST 2018 現(xiàn)在時(shí)間為:Fri Oct 12 11:12:07 CST 2018 【收快遞】事情已經(jīng)過(guò)去了 60

Calendar 類

Calendar 類是一個(gè)抽象類,它為特定瞬間與 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日歷字段之間的轉(zhuǎn)換提供了一些方法,并為操作日歷字段(如獲得下星期的日期) 提供了一些方法。

創(chuàng)建 Calendar 對(duì)象不能使用 new 關(guān)鍵字,因?yàn)?Calendar 類是一個(gè)抽象類,但是它提供了一個(gè)getInstance() 方法來(lái)獲得 Calendar類的對(duì)象。getInstance() 方法返回一個(gè) Calendar 對(duì)象,其日歷字段已由當(dāng)前日期和時(shí)間初始化。

Calendar c = Calendar.getInstance();

當(dāng)創(chuàng)建了一個(gè) Calendar 對(duì)象后,就可以通過(guò) Calendar 對(duì)象中的一些方法來(lái)處理日期、時(shí)間。Calendar 類的常用方法如表 2 所示。

Calendar 對(duì)象可以調(diào)用 set() 方法將日歷翻到任何一個(gè)時(shí)間,當(dāng)參數(shù) year 取負(fù)數(shù)時(shí)表示公元前。Calendar 對(duì)象調(diào)用 get() 方法可以獲取有關(guān)年、月、日等時(shí)間信息,參數(shù) field 的有效值由 Calendar 靜態(tài)常量指定。

Calendar 類中定義了許多常量,分別表示不同的意義。

  • Calendar.YEAR:年份。
  • Calendar.MONTH:月份。
  • Calendar.DATE:日期。
  • Calendar.DAY_OF_MONTH:日期,和上面的字段意義完全相同。
  • Calendar.HOUR:12小時(shí)制的小時(shí)。
  • Calendar.HOUR_OF_DAY:24 小時(shí)制的小時(shí)。
  • Calendar.MINUTE:分鐘。
  • Calendar.SECOND:秒。
  • Calendar.DAY_OF_WEEK:星期幾。

例如,要獲取當(dāng)前月份可用如下代碼:

int month = Calendar.getInstance().get(Calendar.MONTH);

如果整型變量 month 的值是 0,表示當(dāng)前日歷是在 1 月份;如果值是 11,則表示當(dāng)前日歷在 12 月份。

使用 Calendar 類處理日期時(shí)間的實(shí)例如下:

Calendar calendar = Calendar.getInstance(); // 如果不設(shè)置時(shí)間,則默認(rèn)為當(dāng)前時(shí)間 calendar.setTime(new Date()); // 將系統(tǒng)當(dāng)前時(shí)間賦值給 Calendar 對(duì)象 System.out.println("現(xiàn)在時(shí)刻:" + calendar.getTime()); // 獲取當(dāng)前時(shí)間 int year = calendar.get(Calendar.YEAR); // 獲取當(dāng)前年份 System.out.println("現(xiàn)在是" + year + "年"); int month = calendar.get(Calendar.MONTH) + 1; // 獲取當(dāng)前月份(月份從 0 開(kāi)始,所以加 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í)數(shù)(24 小時(shí)制) System.out.print(hour + "時(shí)"); 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è)置年月日,時(shí)分秒將默認(rèn)采用當(dāng)前值 System.out.println("設(shè)置日期為 2012-8-8 后的時(shí)間:" + c.getTime()); // 輸出時(shí)間

上面的示例代碼演示了 Calendar 類中的方法與常量的結(jié)合使用,從而完成處理日期的操作。

例 2
下面使用 Calendar 類來(lái)實(shí)現(xiàn)日歷的打印功能,代碼實(shí)現(xiàn)如下:

import java.util.Calendar; public class CalendarDemo {public static void main(String[] args) {Calendar calendar = Calendar.getInstance();calendar.set(2016, 5, 1); // 實(shí)際的calendar對(duì)象所表示的日期為2016年6月1日// 判斷2016年6月1日為一周中的第幾天int index = calendar.get(Calendar.DAY_OF_WEEK) - 1;char[] title = { '日', '一', '二', '三', '四', '五', '六' }; // 存放曰歷的頭部int daysArray[][] = new int[6][7];// 存放日歷的數(shù)據(jù)int daysInMonth = 31; // 該月的天數(shù)int day = 1; // 自動(dòng)增長(zhǎng)for (int i = index; i < 7; i++) {// 填充第一周的日期數(shù)據(jù),即日歷中的第一行daysArray[0][i] = day++;}for (int i = 1; i < 6; i++) {// 填充其他周的日歷數(shù)據(jù),控制行for (int j = 0; j < 7; j++) {// 如果當(dāng)前day表示的是本月最后一天,則停止向數(shù)組中繼續(xù)賦值if (day > daysInMonth) {i = 6;break;}daysArray[i][j] = day++;}}System.out.println("------------------2016 年 6 月--------------------\n");for (int i = 0; i < title.length; i++) {System.out.print(title[i] + "\t");}System.out.print("\n");// 輸出二元數(shù)組daysArray中的元素for (int i = 0; i < 6; i++) {for (int j = 0; j < 7; j++) {if (daysArray[i][j] == 0) {if (i != 0) {// 如果到月末,則完成顯示日歷的任務(wù),停止該方法的執(zhí)行return;}System.out.print("\t");continue;}System.out.print(daysArray[i][j] + "\t");}System.out.print("\n");}} }

該程序看似復(fù)雜其實(shí)很簡(jiǎn)單。因?yàn)?Calendar 類所表示的時(shí)間月份是 set() 方法中表示月份的參數(shù)值 +1,因此 Calendar 類的實(shí)際時(shí)間為 2016 年 6 月 1 日。在下面的代碼中分別獲取 6 月 1 日為本周中的第幾天,以便在相應(yīng)的星期下開(kāi)始輸出 6 月份的日歷。程序中的 daysArray 是一個(gè)二元數(shù)組,該二元數(shù)組控制了日歷的格式輸出,第一個(gè)子數(shù)組控制日歷的行,第二個(gè)子數(shù)組控制曰歷的列,即可輸出二元數(shù)組中的每一個(gè)元素。

運(yùn)行程序,執(zhí)行結(jié)果如下所示。

------------------20166--------------------日 一 二 三 四 五 六1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

總結(jié)

以上是生活随笔為你收集整理的5、时间日期的处理:Java Date类、Calendar类详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。