Java基礎知識整理之操做日期

Java基礎知識之日期操做

1. Date 簡介

Java中的時間使用標準類庫的java.util.Date,其表示特定的瞬間,精確到毫秒。
是用距離一個固定時間點的毫秒數(可正可負,long類型)表達一個特定的時間點。    
由於Date的設計具備"千年蟲"以及"時區"的問題,因此Date中的大部分方法已經不建議使用了,它們都被"java.util.Calendar"類所取代,從API中就能夠發現,好多方法都已經廢棄掉了。    
經常使用的方法:getTime() 、setTime()
//實例化對象
Date date = new Date();
System.out.println(date.getTime());

2. SimpleDateFormat 簡介

SimpleDateFormat 是一個以與語言環境有關的方式來格式化和解析日期的具體類。它容許進行格式化(日期 -> 文本)、解析(文本 -> 日期)和規範化。常常使用來格式化日期。
經常使用的方法:formate(Date date)、 parse(String s)
//格式化時間字符串
 String StrD ="2017-04-20 11:22:45";
 SimpleDateFormat sdfd =new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
 Date dat =sdfd.parse(StrD);
 System.out.println(dat);

3. Calendar 簡介

java.util.Calendar 是一個抽象類,用於封裝日曆信息,其主要做用在於其方法能夠對時間份量進行運算。    
它爲特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日曆字段之間的轉換提供了方法。
經常使用的方法: getInstance()、set() 、get()、getActualMaximum()、add()、gettime()、setTime(Date)
//設置當前的時間爲 2017-04-25
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,2017);
calendar.set(Calendar.MONTH,04);

 /*
  * 對於幾號而言 calendar 提供了兩個時間份量
  * 意義徹底相同,選擇其中的一個就好
  * DAY_OF_MONTH
  * DATE
  */
calendar.set(Calendar.DATE,25);
calendar.set(Calendar.DAY_OF_MONTH, 25);

綜合實踐

1. 獲取當前時間

public String getCurrentDate(){
    String nowDate = "";
        
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設置日期格式
        nowDate = df.format(new Date());// new Date()爲獲取當前系統時間
        
        return nowDate;
    }

2. 獲取詳細的時間

/**
     * 獲取詳細的時間
     */
    public void getDateDetail() {
        Calendar calendar = Calendar.getInstance(); // 建立對象 = Calendar.getInstance();// 能夠對每一個時間域單獨修改
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;// 月,從0開始,便是輸出5表示6月
        int date = calendar.get(Calendar.DATE);
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);
        int am_pm = calendar.get(Calendar.AM_PM); // 得到是上午仍是下午AM=0,PM=1
    
        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);    // 一個月中的第幾天
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);     // 一週中的第幾天,星期日是第一天
        int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);        // 一年中的第幾天
        int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);         // 一天中的第幾小時

        if (calendar.get(Calendar.AM_PM) == Calendar.AM) {
            System.out.println("如今是上午");
        }

        if (calendar.get(Calendar.MONTH) + 1 == Calendar.JULY) {
            System.out.println("如今是6月");
        }
        
        System.out.println(year + "/" + month + "/" + date + " " + hour + ":"+ minute + ":" + second);
    }

3. 日期的加減法

/**
     * 日期的 add()
     * 日期加上一個正數就是時間向後(將來)移動,日期加上負數就是向前(過去)移動
     * 當日期加到 32 的時候,就會順移到下一個月
     */
    public void addDate(){
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd EE hh:mm:ss");    
        Calendar c = Calendar.getInstance();    //獲取當前日期的實例
        
        c.add(Calendar.MONTH, 1);    //當前時間加一個月
        //c.add(Calendar.MONTH, -1);    //當前時間減一個月
        System.out.println(df.format(c.getTime()));     //格式化輸出當前的時間
        
        c.add(Calendar.HOUR, 3); // 當前時間加 3個小時
        //c.add(Calendar.HOUR, -3); // 當前時間減 3個小時
        System.out.println(df.format(c.getTime())); 
        
        c.add(Calendar.YEAR, 1);    //當前時間加一年
        //c.add(Calendar.YEAR, -1);    //當前時間減一年
        System.out.println(df.format(c.getTime()));
        
         c.add(Calendar.DAY_OF_WEEK, 7); // 當前時間加7天 
         //c.add(Calendar.DAY_OF_WEEK, -7); // 當前時間減7天 
         System.out.println(df.format(c.getTime()));
    }

4. 日期的比較

/**
     * 日期比較
     */
    public void compareDate(){
        //日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString_01 = "2017-01-01 11:11:11";
        String dateString_02 = "2016-01-02 11:11:11";
        
        try {
           Date date_01 = sdf.parse( dateString_01 );
           Date date_02 = sdf.parse( dateString_02 );
           
           System.out.println( date_01.before(date_02) ); //true,當 date_01 小於 date_02 時,爲 true,不然爲 false
           System.out.println( date_02.after(date_01) ); //true,當 date_02 大於 date_01 時,爲 true,不然爲 false
           
           System.out.println( date_01.compareTo(date_02) ); //-1,當 date_01 小於 date_02 時,爲 -1
           System.out.println (date_02.compareTo(date_01) ); //1,當 date_02 大於 date_01 時,爲 1
           System.out.println( date_02.compareTo(date_02) ); //0,當兩個日期相等時,爲 0
               
        } catch (ParseException e) {
           e.printStackTrace();
        }
    }

5. 計算兩個日期相隔多少天

/**
     * 計算日期相隔多少天
     * @throws ParseException
     */
    public void calculateDate() throws ParseException{
        SimpleDateFormat format  = new SimpleDateFormat("yyyy-MM-dd");
        Date beginDate= format.parse("2017-06-24");
        Date endDate= format.parse("2017-06-30");
        
        long day = ( endDate.getTime()-beginDate.getTime() )/(24*60*60*1000); 
        System.out.println(day);
    }

因爲 Java8 出了新特性,附上連接:Java8新特性之日期處理java

相關文章
相關標籤/搜索