我們經(jīng)常會涉及到對時間的處理,例如登陸網(wǎng)站,我們會看到網(wǎng)站首頁顯示XXX,歡迎您!今天是XXXX年。。。。某些網(wǎng)站會記錄下用戶登陸的時間,比如銀行的一些網(wǎng)站,對于這些經(jīng)常需要處理的問題,Java中提供了Calendar這個專門用于對日期進行操作的類,那么這個類有什么特殊的地方呢,首先我們來看Calendar的聲明 public abstract class Calendar extends Objectimplements Serializable, Cloneable, Comparable<Calendar> 該類被abstract所修飾,說明不能通過new的方式來獲得實例,對此,Calendar提供了一個類方法getInstance,以獲得此類型的一個通用的對象,getInstance方法返回一個Calendar對象(該對象為Calendar的子類對象),其日歷字段已由當前日期和時間初始化: Calendar rightNow = Calendar.getInstance(); 為什么說返回的是Calendar的子類對象呢,因為每個國家地區(qū)都有自己的一套日歷算法,比如西方國家的第一個星期大部分為星期日,而中國則為星期一,我們來看看getInstance方法獲取實例的源碼 /** * Gets a calendar using the default time zone and locale. The * <code>Calendar</code> returned is based on the current time * in the default time zone with the default locale. * * @return a Calendar. */ public static Calendar getInstance() { Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault(Locale.Category.FORMAT)); cal.sharedZone = true; return cal; }View Code ? ? ? 注意事項: Calendar 的 month 從 0 開始,也就是全年 12 個月由 0 ~ 11 進行表示。 而 Calendar.DAY_OF_WEEK 定義值如下,每周從 SUNDAY 開始,從 1 ~ 7: Calendar.SUNDAY = 1 Java Calendar 演示代碼如下: package demo; import java.util.Date; import java.text.SimpleDateFormat; import java.text.DateFormat; import java.text.ParseException; import java.util.Calendar; public class Test { public Test() { } public static void main(String[] args) { // 字符串轉(zhuǎn)換日期格式 // DateFormat fmtDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 接收傳入?yún)?shù) // String strDate = args[1]; // 得到日期格式對象 // Date date = fmtDateTime.parse(strDate); // 完整顯示今天日期時間 String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(new Date()); System.out.println(str); // 創(chuàng)建 Calendar 對象 Calendar calendar = Calendar.getInstance(); try { // 對 calendar 設(shè)置時間的方法 // 設(shè)置傳入的時間格式 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-M-d H:m:s"); // 指定一個日期 Date date = dateFormat.parse("2013-6-1 13:24:16"); // 對 calendar 設(shè)置為 date 所定的日期 calendar.setTime(date); // 按特定格式顯示剛設(shè)置的時間 str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime()); System.out.println(str); } catch (ParseException e) { e.printStackTrace(); } // 或者另一種設(shè)置 calendar 方式 // 分別爲 year, month, date, hourOfDay, minute, second calendar = Calendar.getInstance(); calendar.set(2013, 1, 2, 17, 35, 44); str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime()); System.out.println(str); // Calendar 取得當前時間的方法 // 初始化 (重置) Calendar 對象 calendar = Calendar.getInstance(); // 或者用 Date 來初始化 Calendar 對象 calendar.setTime(new Date()); // setTime 類似上面一行 // Date date = new Date(); // calendar.setTime(date); str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime()); System.out.println(str); // 顯示年份 int year = calendar.get(Calendar.YEAR); System.out.println("year is = " String.valueOf(year)); // 顯示月份 (從0開始, 實際顯示要加一) int month = calendar.get(Calendar.MONTH); System.out.println("nth is = " (month 1)); // 本周幾 int week = calendar.get(Calendar.DAY_OF_WEEK); System.out.println("week is = " week); // 今年的第 N 天 int DAY_OF_YEAR = calendar.get(Calendar.DAY_OF_YEAR); System.out.println("DAY_OF_YEAR is = " DAY_OF_YEAR); // 本月第 N 天 int DAY_OF_MONTH = calendar.get(Calendar.DAY_OF_MONTH); System.out.println("DAY_OF_MONTH = " String.valueOf(DAY_OF_MONTH)); // 3小時以后 calendar.add(Calendar.HOUR_OF_DAY, 3); int HOUR_OF_DAY = calendar.get(Calendar.HOUR_OF_DAY); System.out.println("HOUR_OF_DAY 3 = " HOUR_OF_DAY); // 當前分鐘數(shù) int MINUTE = calendar.get(Calendar.MINUTE); System.out.println("MINUTE = " MINUTE); // 15 分鐘以后 calendar.add(Calendar.MINUTE, 15); MINUTE = calendar.get(Calendar.MINUTE); System.out.println("MINUTE 15 = " MINUTE); // 30分鐘前 calendar.add(Calendar.MINUTE, -30); MINUTE = calendar.get(Calendar.MINUTE); System.out.println("MINUTE - 30 = " MINUTE); // 格式化顯示 str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime()); System.out.println(str); // 重置 Calendar 顯示當前時間 calendar.setTime(new Date()); str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime()); System.out.println(str); // 創(chuàng)建一個 Calendar 用于比較時間 Calendar calendarNew = Calendar.getInstance(); // 設(shè)定為 5 小時以前,后者大,顯示 -1 calendarNew.add(Calendar.HOUR, -5); System.out.println("時間比較:" calendarNew.compareTo(calendar)); // 設(shè)定7小時以后,前者大,顯示 1 calendarNew.add(Calendar.HOUR, 7); System.out.println("時間比較:" calendarNew.compareTo(calendar)); // 退回 2 小時,時間相同,顯示 0 calendarNew.add(Calendar.HOUR, -2); System.out.println("時間比較:" calendarNew.compareTo(calendar)); } } ? 運行結(jié)果 2013-06-07 23:27:34:195 2013-06-01 13:24:16:000 2013-02-02 17:35:44:197 2013-06-07 23:27:34:197 year is = 2013 nth is = 6 week is = 6 DAY_OF_YEAR is = 158 DAY_OF_MONTH = 7 HOUR_OF_DAY 3 = 2 MINUTE = 27 MINUTE 15 = 42 MINUTE - 30 = 12 2013-06-08 02:12:34:197 2013-06-07 23:27:34:199 時間比較:-1 時間比較:1 時間比較:0 要計算時間差,可用 Calendar.getTimeInMillis() 取得兩個時間的微秒級的時間差,再加以換算即可,比如獲得相差天數(shù),代碼如下: // 得微秒級時間差 long val = calendarEnd.getTimeInMillis() - calendarBegin.getTimeInMillis(); // 換算后得到天數(shù) long day = val / (1000 * 60 * 60 * 24); 其他與 date 相關(guān)的類型轉(zhuǎn)換代碼如下。 Timestamp 類型轉(zhuǎn)換為 Date 類型: Timestamp stamp = new Timestamp(System.currentTimeMillis()); Date date = new Date(stamp.getTime()); System.out.println(date); Timestamp 類型轉(zhuǎn)換為 Calendar 類型: // 獲取 Timestamp 類型時間 Timestamp timestamp = new Timestamp(System.currentTimeMillis()); // 轉(zhuǎn)換為 Calendar 類型,SUN 也推薦用 Calendar 處理時間信息 Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(timestamp.getTime()); Date 類型轉(zhuǎn)換為?Calendar 類型 // Date 向 Calendar 賦值 calendar.setTime(date); Calendar 類型轉(zhuǎn)換為 Timestamp 類型: // 創(chuàng)建 Calendar 對象,也同時獲取了當前時間 Calendar calendar = Calendar.getInstance(); // 轉(zhuǎn)換為 Timestamp 類型對象 Timestamp timestamp = new Timestamp(calendar.getTimeInMillis()); System.out.println(timestamp); Calendar 類型轉(zhuǎn)換為 Date 類型: // Calendar 對象類型轉(zhuǎn)換為 Date 對象類型 Calendar calendar = Calendar.getInstance(); java.util.Date date = calendar.getTime(); System.out.println(date); ? ? ? ? https://blog.csdn.net/joyous/article/details/9630893 https://www.cnblogs.com/huangminwen/p/6041168.html ? 來源:http://www./content-4-27451.html |
|