JDK 8之前日期和時間類——System類, java.util.Date類,java.sql.Date類,SimpleDateFormat時間格式類,Calender時間操作類及JDK8說明

 

1.System類中的currentTimeMillis()  

返回當前時間與1970年1月1日0時0分0秒之間以毫秒爲單位的時間差,簡稱時間戳。

    @Test
    public void test1(){
        long time = System.currentTimeMillis();
        //返回時間戳
        System.out.println(time);
    }

 

2.java.util.Date類 

           |---java.sql.Date類

1.兩個構造器的使用

>構造器一:Date():創建一個對應當前時間的Date對象

>構造器二:創建指定毫秒數的Date對象

2.兩個方法的使用

>toString():顯示當前的年、月、日、時、分、秒

>getTime():獲取當前Date對象對應的毫秒數。(時間戳)

 

    @Test
    public void test2(){
        //構造器一:Date():創建一個對應當前時間的Date對象
        Date date1 = new Date();
        System.out.println(date1.toString());//Sat Feb 16 16:35:31 GMT+08:00 2019

        System.out.println(date1.getTime());//1550306204104

        //構造器二:創建指定毫秒數的Date對象
        Date date2 = new Date(1550306204104L);
        System.out.println(date2.toString());
    }

 

 3. java.sql.Date類

是.java.util.Date類 的子類。更多的用在數據庫這一塊。對應着數據庫中的日期類型的變量,

>如何實例化

>如何將java.util.Date對象轉換爲java.sql.Date對象

    @Test
    public void test3(){
        //創建java.sql.Date對象
        java.sql.Date date3 = new java.sql.Date(35235325345L);
        System.out.println(date3);//1971-02-13

        //如何將java.util.Date對象轉換爲java.sql.Date對象
        	//情況一:子類轉父類的,然後強轉回子類
        Date date4 = new java.sql.Date(2343243242323L);
       	java.sql.Date date5 = (java.sql.Date) date4;
       	 //情況二:拿到父類生成的時間戳,放入子類構造器中
        Date date6 = new Date();
        java.sql.Date date7 = new java.sql.Date(date6.getTime());


    }

 

4.SimpleDateFormat 是對時間顯示的格式進行調整的類。

 

SimpleDateFormat對日期Date類的格式化和解析,主體是兩個操作:
1.1 格式化:日期 --->字符串
1.2 解析:格式化的逆過程,字符串 ---> 日期

2.SimpleDateFormat的實例化,重載的構造器,填入你想要的時間格式,輸入對應時間。

@Test
    public void testSimpleDateFormat() throws ParseException {
        //實例化SimpleDateFormat:使用默認的構造器
        SimpleDateFormat sdf = new SimpleDateFormat();

        //格式化:日期 --->字符串
        Date date = new Date();
        System.out.println(date);

        String format = sdf.format(date);
        System.out.println(format);

        //解析:格式化的逆過程,字符串 ---> 日期
        String str = "19-12-18 上午11:43";
        Date date1 = sdf.parse(str);
        System.out.println(date1);

        //*************按照指定的方式格式化和解析:調用帶參的構造器*****************
//        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        //格式化
        String format1 = sdf1.format(date);
        System.out.println(format1);//2019-02-18 11:48:27
        //解析:要求字符串必須是符合SimpleDateFormat識別的格式(通過構造器參數體現),
        //否則,拋異常
        Date date2 = sdf1.parse("2020-02-18 11:48:27");
        System.out.println(date2);
    }

 

5.java.util.Calendar 類,相當時間的操作類,對日期進行增刪改查。

原本Date類中就有增刪改查操作,但其中的方法都被廢棄的。替代的是jdk1.1的Calendar 類。

   首先Calendar類是一個抽象類,實例化可以調用其靜態方法Calender.getInstance();返回的是其子類 GregorianCalender.

 @Test
    public void testCalendar(){
        //1.實例化
        //方式一:創建其子類(GregorianCalendar)的對象
        //方式二:調用其靜態方法getInstance()
        Calendar calendar = Calendar.getInstance();
//        System.out.println(calendar.getClass());

        //2.常用方法
        //get()
        int days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));

        //set()
        //calendar可變性
        calendar.set(Calendar.DAY_OF_MONTH,22);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);

        //add()
        calendar.add(Calendar.DAY_OF_MONTH,-3);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);

        //getTime():日曆類---> Date
        Date date = calendar.getTime();
        System.out.println(date);

        //setTime():Date ---> 日曆類
        Date date1 = new Date();
        calendar.setTime(date1);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);

    }

 

6. 就以jdk8之前上類,很難滿足我們程序員對時間表達的需求。比如希望時間跟晝夜和四季有關等。

就以上類,還面臨的問題有:

1.偏移性:Date中的年份是從1900開始的,而月份都是從0開始的。

2.格式化:格式化只對Date有用,Calendar則不行。時間各個類表示不同的操作,表現出它的複雜性了。

3.可變性:像日期和時間這樣的類應該是不可變的。

4.她們不是線程安全的,不能處理閏秒等等......

他們都是說,對日期和時間的操作一直都是Java程序員最痛苦的地方之一

 

所以引入了jdk8中新日期時間的API 

java.time基礎包

java.time.format格式解釋包

java.time.chrono 對不同日曆系統訪問包

java.time.temporal 包括底層框架和擴展特性包

java.time.zone  包含時區支持類的包

 

說明一下:大多數開發者只會用到基礎包和format包。因此,儘管更新了68公開類型,大多數開發着,大概只用到了其中的三分之一。

如:java.time.LocalDateTime,java.time.LocalDate,java.time.LocalTime;等等

 

一個程序員的自我修養和成長........

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章