Java時間類總結

java.util.Date

包含有年月日時分秒,精確到毫秒級別。
官方解釋:java

// The class Date represents a specific instant in time, with millisecond precision.
// 語句
Date date = new Date();
System.out.println(date);

//輸出結果
Sat Feb 03 14:48:47 CST 2018

java.sql.Date

包含年月日,時分秒都被設置爲0,之因此這樣設計是爲了適應SQL中的DATE類型。
官方解釋:sql

// A thin wrapper around a millisecond value that allows JDBC to identify this as an SQL DATE value. A milliseconds value represents the number of milliseconds that have passed since January 1, 1970 00:00:00.000 GMT.
// To conform with the definition of SQL DATE, the millisecond values wrapped by a java.sql.Date instance must be 'normalized' by setting the hours, minutes, seconds, and milliseconds to zero in the particular time zone with which the instance is associated.

注意,雖說這個類是使用年月日的,可是初始化的時候,須要一個long類型的參數,這個參數表明着January 1, 1970, 00:00:00 GMT到某個時間的毫秒數。若是是當前時間的話,能夠用System.currentTimeMillis()或者new Date().getTime()獲取。安全

// 語句
java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());
System.out.println(sqlDate);

// 輸出結果
2018-02-03

java.sql.Time

包含時分秒,這個也是爲了SQL中的TIME類型而出現的。app

// 語句
Time time = new Time(System.currentTimeMillis());
System.out.println(time);

// 輸出結果
15:07:35

java.sql.Timestamp

時間戳,適配於SQL中的TIMESTAMP類型而出現的,精確到納秒級別。ide

格式化輸出:java.text.SimpleDateFormat

這個類提供時間的各類格式化輸出和將字符串轉換爲時間類,簡單來講,它擁有date → text 以及text → date的能力。
例如:將Date格式化輸出ui

// 格式化輸出
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
    String dateStr = sdf.format(new Date());
    System.out.println(dateStr);

    // 結果
    2018年02月03日  15:20:58

例如:將時間字符串轉化爲Datethis

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
    Date date = sdf.parse("2018年02月03日  15:20:58");

注意,SimpleDateFormat.parse(String source)中的source格式必定得是SimpleDateFormat當前使用的格式。如這個例子中使用了yyyy年MM月dd日 HH:mm:ss,因此傳入了2018年02月03日 15:20:58時間字符串。
PS:有些同窗對yyyy或者MM這些字母表明的含義不懂的話,建議使用這個類的時候,看一下源碼,源碼類上都有對這些字母的解釋。線程

java.util.Calendar

日曆類,這個類大多被用於獲取時間的特殊屬性,好比說獲取某個時間對象的年份、月份、星期等設計

Calendar calendar = Calendar.getInstance();
    // 設置時間,不設置的話,默認是當前時間
    calendar.setTime(new Date());
    // 獲取時間中的年份
    int year = calendar.get(Calendar.YEAR);

從JDK1.8開始,Calendar增長新的構造方式code

// since jdk 1.8
    Calendar calendar = new Calendar.Builder().setDate(2018, 3, 25).build();
    int year = calendar.get(Calendar.YEAR);
    System.out.println(year);

階段小結

以上大概就是jdk1.8以前的操做時間方式了。而後,從jdk1.8開始,有了新的操做時間的類。

java.time.LocalDate

LocalDate提供年月日而不提供時分秒信息,它是不可變類且線程安全的。它常常被用於展現year-month-day,day-of-year,day-of-week,week-of-year等格式的信息。

LocalDate localDate = LocalDate.now();
        // 獲取當天是幾號
        int dayOfMonth = localDate.getDayOfMonth();
        // 獲取當天是星期幾
        DayOfWeek dayOfWeek = localDate.getDayOfWeek();
        
        // 獲取本月的第一天
        LocalDate firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
        // 取本月最後一天
        LocalDate lastDayOfThisMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());

是否是很贊~

java.time.Time

提供時分秒不提供年月日,也是線程安全而且不可變類。它常常被用於展現hour-minute-second格式的信息。能夠對時間進行加減等操做。

// 樣例
        LocalTime localTime = LocalTime.now();
        // 獲取當前的小時
        int hour = localTime.getHour();
        System.out.println(hour);
        // 小時數加1
        LocalTime addTwoHours = localTime.plusHours(2L);
        System.out.println(addTwoHours.getHour());

        // 結果
        16
        18

java.time.LocalDateTime

包含年月日時分秒,精確到納秒級別,一樣是線程安全而且不可變類。它能夠操做時間中的年月日時分秒而且能夠獲取其中的屬性。

LocalDateTime localDateTime = LocalDateTime.now();
        // 獲取年
        int year = localDateTime.getYear();
        // 獲取小時
        int hour = localDateTime.getHour();
        // 增長一年
        LocalDateTime addOneYear = localDateTime.plusYears(1);

結語

今天就先這樣啦,但願看到這篇博文的人能有所收穫,一樣,錯誤之處還請幫忙指正。

相關文章
相關標籤/搜索