Java时间日期的处理
在 Java 中獲取當前時間,可以使用 java.util.Date 類和 java.util.Calendar 類完成。其中,Date 類主要封裝了系統的日期和時間的信息,Calendar 類則會根據系統的日歷來解釋 Date 對象。
Date 類
Date 類表示系統特定的時間戳,可以精確到毫秒。Date 對象表示時間的默認順序是星期、月、日、小時、分、秒、年。
1. 構造方法
Date 類有如下兩個構造方法。
這兩個構造方法的使用示例如下:
Date date1 = new Date(); // 調用無參數構造函數 System.out.println(date1.toString()); // 輸出:Wed May 18 21:24:40 CST 2016Date date2 = new Date(60000); // 調用含有一個long類型參數的構造函數 System.out.println(date2); // 輸出:Thu Jan 0108:01:00 CST 1970Date 類的無參數構造方法獲取的是系統當前的時間,顯示的順序為星期、月、日、小時、分、秒、年。
Date 類帶 long 類型參數的構造方法獲取的是距離 GMT 指定毫秒數的時間,60000 毫秒是一分鐘,而 GMT(格林尼治標準時間)與 CST(中央標準時間)相差 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。
2. 常用方法
Date 類提供了許多與日期和事件相關的方法,其中常見的方法如下表所示。
假設,某一天特定時間要去做一件事,而且那個時間已經過去一分鐘之后才想起來這件事還沒有辦,這時系統將會提示已經過去了多 長時間。代碼如下:
在該程序中,分別使用 Date 類的無參數構造方法創建了兩個 Date 對象。在創建完第一個 Date 對象后,使用 Thread.sleep() 方法讓程序休眠 60 秒,然后再創建第二個 Date 對象,這樣第二個 Date 對象所表示的時間將會在第一個 Date 對象所表示時間之后,因此“date2.before(date1)”條件表達式不成立,從而執行 else 塊中的代碼,表示事情已經發生過。
運行該程序
請輸入要做的事情: 放風箏 【放風箏】這件事發生時間為:Fri Oct 12 11:11:07 CST 2018 現在時間為:Fri Oct 12 11:12:07 CST 2018 【放風箏】事情已經過去了 60 秒Calendar 類
Calendar 類是一個抽象類,它為特定瞬間與 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日歷字段之間的轉換提供了一些方法,并為操作日歷字段(如獲得下星期的日期) 提供了一些方法。
創建 Calendar 對象不能使用 new 關鍵字,因為 Calendar 類是一個抽象類,但是它提供了一個 getInstance() 方法來獲得 Calendar類的對象。getInstance() 方法返回一個 Calendar 對象,其日歷字段已由當前日期和時間初始化。
Calendar c = Calendar.getInstance();當創建了一個 Calendar 對象后,就可以通過 Calendar 對象中的一些方法來處理日期、時間。
Calendar 類的常用方法。
Calendar 對象可以調用 set() 方法將日歷翻到任何一個時間,當參數 year 取負數時表示公元前。Calendar 對象調用 get() 方法可以獲取有關年、月、日等時間信息,參數 field 的有效值由 Calendar 靜態常量指定。
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:星期幾。獲取當前月份可用如下代碼:
int month = Calendar.getInstance().get(Calendar.MONTH);如果整型變量 month 的值是 0,表示當前日歷是在 1 月份;如果值是 11,則表示當前日歷在 12 月份。
使用 Calendar 類處理日期時間的實例如下:
Calendar calendar = Calendar.getInstance(); // 如果不設置時間,則默認為當前時間 calendar.setTime(new Date()); // 將系統當前時間賦值給 Calendar 對象 System.out.println("現在時刻:" + calendar.getTime()); // 獲取當前時間int year = calendar.get(Calendar.YEAR); // 獲取當前年份 System.out.println("現在是" + year + "年");int month = calendar.get(Calendar.MONTH) + 1; // 獲取當前月份(月份從 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); // 獲取當前小時數(24 小時制) System.out.print(hour + "時");int minute = calendar.get(Calendar.MINUTE); // 獲取當前分鐘 System.out.print(minute + "分");int second = calendar.get(Calendar.SECOND); // 獲取當前秒數 System.out.print(second + "秒");int millisecond = calendar.get(Calendar.MILLISECOND); // 獲取毫秒數 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); // 設置年月日,時分秒將默認采用當前值 System.out.println("設置日期為 2012-8-8 后的時間:" + c.getTime()); // 輸出時間使用 Calendar 類來實現日歷的打印功能,代碼實現如下:
import java.util.Calendar;public class CalendarDemo {public static void main(String[] args) {Calendar calendar = Calendar.getInstance();calendar.set(2016, 5, 1); // 實際的calendar對象所表示的日期為2016年6月1日// 判斷2016年6月1日為一周中的第幾天int index = calendar.get(Calendar.DAY_OF_WEEK) - 1;char[] title = { '日', '一', '二', '三', '四', '五', '六' }; // 存放曰歷的頭部int daysArray[][] = new int[6][7];// 存放日歷的數據int daysInMonth = 31; // 該月的天數int day = 1; // 自動增長for (int i = index; i < 7; i++) {// 填充第一周的日期數據,即日歷中的第一行daysArray[0][i] = day++;}for (int i = 1; i < 6; i++) {// 填充其他周的日歷數據,控制行for (int j = 0; j < 7; j++) {// 如果當前day表示的是本月最后一天,則停止向數組中繼續賦值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");// 輸出二元數組daysArray中的元素for (int i = 0; i < 6; i++) {for (int j = 0; j < 7; j++) {if (daysArray[i][j] == 0) {if (i != 0) {// 如果到月末,則完成顯示日歷的任務,停止該方法的執行return;}System.out.print("\t");continue;}System.out.print(daysArray[i][j] + "\t");}System.out.print("\n");}} }Calendar 類所表示的時間月份是 set() 方法中表示月份的參數值 +1,因此 Calendar 類的實際時間為 2016 年 6 月 1 日。在下面的代碼中分別獲取 6 月 1 日為本周中的第幾天,以便在相應的星期下開始輸出 6 月份的日歷。程序中的 daysArray 是一個二元數組,該二元數組控制了日歷的格式輸出,第一個子數組控制日歷的行,第二個子數組控制曰歷的列,即可輸出二元數組中的每一個元素。
運行程序,執行結果如下所示。
------------------2016 年 6 月--------------------日 一 二 三 四 五 六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總結
以上是生活随笔為你收集整理的Java时间日期的处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot MyBatis
- 下一篇: Java @SuppressWarni