包含有年月日時分秒,精確到毫秒級別。
官方解釋: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
包含年月日,時分秒都被設置爲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
包含時分秒,這個也是爲了SQL中的TIME
類型而出現的。app
// 語句 Time time = new Time(System.currentTimeMillis()); System.out.println(time); // 輸出結果 15:07:35
時間戳,適配於SQL中的TIMESTAMP
類型而出現的,精確到納秒級別。ide
這個類提供時間的各類格式化輸出和將字符串轉換爲時間類,簡單來講,它擁有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
這些字母表明的含義不懂的話,建議使用這個類的時候,看一下源碼,源碼類上都有對這些字母的解釋。線程
日曆類,這個類大多被用於獲取時間的特殊屬性,好比說獲取某個時間對象的年份、月份、星期等設計
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開始,有了新的操做時間的類。
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());
是否是很贊~
提供時分秒不提供年月日,也是線程安全而且不可變類。它常常被用於展現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
包含年月日時分秒,精確到納秒級別,一樣是線程安全而且不可變類。它能夠操做時間中的年月日時分秒而且能夠獲取其中的屬性。
LocalDateTime localDateTime = LocalDateTime.now(); // 獲取年 int year = localDateTime.getYear(); // 獲取小時 int hour = localDateTime.getHour(); // 增長一年 LocalDateTime addOneYear = localDateTime.plusYears(1);
今天就先這樣啦,但願看到這篇博文的人能有所收穫,一樣,錯誤之處還請幫忙指正。