1. 程式人生 > >Java基礎——常用類之日期時間類

Java基礎——常用類之日期時間類

  如果有機會,請嘗試Java8中全新的時間日期API!(參見Java8新特性隨筆)

  如果還是使用Java7及之前的版本,那麼你可以嘗試一些工具類(參考使用工具類相關的Hutool-DateUtil)

  如果又不能升級JDK,又無法引入第三方依賴庫,那麼你可以需要了解以下的時間日期相關的API(無奈之舉)

一、常用日期類

   

二、System類

  我們比較常用的時間相關的方法:

  

  我們這裡特別注意一下它的定義:返回的是與1970.1.1的時間差(單位:毫秒),由這個定義我們也容易知道它一般不單獨使用(意義不大),

  最常見的用途就是:計算時間差:

public static void main(String[] args) {
        long start = System.currentTimeMillis();
        for (int i = 0; i<100; i++) {
            if (i % 2 == 0) {
                System.out.println("左青龍");
            } else {
                System.out.println("右白虎");
            }
        }
        
long end = System.currentTimeMillis(); System.out.println("用時(ms):"+ (end - start)); }

三、Date類

  1.構造方法(過時方法不再贅述)

  

  例項化Date:(已重寫toString())

  public static void main(String[] args) {
        // 通過構造器構建Date例項
        Date date1 = new Date();
        System.out.println(date1);// Thu Sep 14 20:32:16 CST 2017
    }

  //使用long型有參構造請帶上字尾L(new Date(13807966980L))

  2.常用方法(可以看到API中很多方法都已經過時)

  getTime()——返回對應的毫秒數

   public static void main(String[] args) {
        // 通過構造器構建Date例項
        Date date1 = new Date();
        System.out.println(date1.getTime());// 1505392872857
    }

四、SimpleDateFormat

  由於Date類不利於國際化,已經由java.text包(實際上與格式化和解析的類基本都在此包下)下的SimpleDateFormat替代,

  作為一個與語言環境有關的方式來格式化和解析日期的具體類

  1.構造方法:

  

    也可以解析例如Sep等的英文縮寫月份!

   

 

   2.常用方法:(用於解析與格式化)

  format(Date date)——格式化,將日期格式化為字串

  pattern格式詳解可以參見API(常用:yyyy-MM-dd HH:mm:ss)

public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 格式化
        String s = sdf.format(new Date());
        System.out.println(s);// 2017-09-14
    }

parse(String str)——解析,將字串解析為日期

public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 解析
        try {
            Date date = sdf.parse("2008-8-8");
            System.out.println(date);// Fri Aug 08 00:00:00 CST 2008
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

五、Calendar

  主要用於完成欄位之間的相互操作的一個抽象基類

  1.構造方法(由於是抽象類,無法直接new)

  

  2.常用方法

    get(int field)——獲取欄位的方法

  

  其中涉及的屬性可以參見API的屬性列表,其中的注意點:

MONTH月份從0開始,也就是1-12月對應 0-11,在Calender中有常量,如Calender.MAY等常量來表示!

DAY_OF_WEEK從1開始,也就是週日到週六對應 1-7

  例項:

public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar c;
        // 解析
        try {
            Date date = sdf.parse("2017-9-14 21:42:18");
            // 使用Date作為引數初始化日曆類
            c = Calendar.getInstance();
            c.setTime(date);
            // 驗證日曆設定的時間是否生效
            String s = sdf.format(c.getTime());
            System.out.println(s);
            /*通過日曆對日期進行欄位的操作,獲取年月日,操作年月日等*/
            // 顯示年份
            int year = c.get(Calendar.YEAR);
            System.out.println("年份:"+year);
            // 顯示月份(從0開始)
            int month = c.get(Calendar.MONTH);
            System.out.println("月份:"+month);
            // 周幾(從週日(對應1)開始)
            int weekDay = c.get(Calendar.DAY_OF_WEEK);
            System.out.println("周幾:"+weekDay);
            // 本月第N天
            int day = c.get(Calendar.DAY_OF_MONTH);
            System.out.println("本月第幾天:"+day);
            /*利用日曆操作日期*/
            // 2小時後
            c.add(Calendar.HOUR_OF_DAY, 2);
            int hour = c.get(Calendar.HOUR_OF_DAY);
            System.out.println("2小時後:"+hour);
            // 15分鐘前
            c.add(Calendar.MINUTE, -15);
            int min = c.get(Calendar.MINUTE);
            System.out.println("15分鐘前:"+min);
            // 重置為當前時間
            c.setTime(new Date());
            Date now = c.getTime();
            String s1 = sdf.format(now);
            System.out.println("當前時間:"+s1);
        } catch (ParseException e) {
            e.printStackTrace();
        }

結果: