jdk8 之 java.time包AND DateUtils

 1 package com.jansh.comm.util;  2  3 import java.time.Clock;  4 import java.time.LocalDate;  5 import java.time.LocalDateTime;  6 import java.time.LocalTime;  7 import java.time.Period;  8 import java.time.format.DateTimeFormatter;  9  10 /**  11  * 日期時間工具類  12  *  13  * @author nie  14  *  15 */  16 public class DateUtil {  17 /**  18  * yyyyMMddHHmmss  19 */  20 public static final DateTimeFormatter formatter_DateTimestamp = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");  21 /**  22  * yyyy-MM-dd HH:mm:ss  23 */  24 public static final DateTimeFormatter formatter_DateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");  25  26 /**  27  * 獲取當前日期  28  *  29  * @return  30 */  31 public static LocalDate getLocalDate() {  32 return LocalDate.now();  33  }  34  35 /**  36  * 獲取當前時間  37  *  38  * @return  39 */  40 public static LocalTime getLocalTime() {  41 return LocalTime.now();  42  }  43  44 /**  45  * 獲取當前日期時間  46  *  47  * @return  48 */  49 public static LocalDateTime getLocalDateTime() {  50 return LocalDateTime.now();  51  }  52  53 /**  54  * 獲取當前的微秒數  55  *  56  * @return  57 */  58 public static long getClockMillis() {  59 Clock clock = Clock.systemDefaultZone();  60 return clock.millis();  61  }  62  63 /**  64  * 返回當前時間yyyyMMddHHmmss  65  *  66  * @return  67 */  68 public static String getDateTimestamp() {  69 return getLocalDateTime().format(formatter_DateTimestamp);  70  }  71  72 /**  73  * 返回當前時間yyyy-MM-dd  74  *  75  * @return  76 */  77 public static String getDate() {  78 return getLocalDate().format(DateTimeFormatter.ISO_LOCAL_DATE);  79  }  80  81 /**  82  * 返回當前系統時間 yyyy-MM-dd HH:mm:ss  83  *  84  * @return 返回當前系統時間  85 */  86 public static String getDateTime() {  87 return getLocalDateTime().format(formatter_DateTime);  88  }  89  90 /**  91  * 獲取當月第一天 yyyy-MM-dd  92  *  93  * @return  94 */  95 public static String getFirstDayOfMonth() {  96 return getLocalDate().withDayOfMonth(1).format(DateTimeFormatter.ISO_LOCAL_DATE);  97  }  98  99 /** 100  * 獲取本月最後一天 yyyy-MM-dd 101  * 102  * @return 103 */ 104 public static String getLastDayOfMonth() { 105 LocalDate localDate = getLocalDate(); 106 return localDate.withDayOfMonth(localDate.lengthOfMonth()).format(DateTimeFormatter.ISO_LOCAL_DATE); 107  } 108 109 /** 110  * 將yyyyMMddHHmmss轉爲 yyyy-MM-dd HH:mm:ss 111  * 112  * @param time 113  * @return 114 */ 115 public static String formatDateTimestamp(String dateTimestamp) { 116 return LocalDateTime.parse(dateTimestamp, formatter_DateTimestamp).format(formatter_DateTime); 117  } 118 119 /** 120  * 將yyyy-MM-dd HH:mm:ss轉爲 yyyyMMddHHmmss 121 */ 122 public static String formatDateTime(String dateTime) { 123 return parseLocalDateTime(dateTime).format(formatter_DateTimestamp); 124  } 125 126 /** 127  * 將yyyy-MM-dd HH:mm:ss轉爲 LocalDateTime 128 */ 129 public static LocalDateTime parseLocalDateTime(String dateTime) { 130 return LocalDateTime.parse(dateTime, formatter_DateTime); 131  } 132 133 /** 134  * 將yyyyMMddHHmmss轉爲 LocalDateTime 135 */ 136 public static LocalDateTime parseLocalDateTimestamp(String dateTimestamp) { 137 return LocalDateTime.parse(dateTimestamp, formatter_DateTimestamp); 138  } 139 140 /** 141  * yyyy-MM-dd字符串轉LocalDate 142  * 143  * @param dateString 144  * @return 145 */ 146 public static LocalDate parseLocalDate(String dateString) { 147 return LocalDate.parse(dateString, DateTimeFormatter.ISO_LOCAL_DATE); 148  } 149 150 /** 151  * yyyy-MM-dd 增長日期 152  * 153  * @param date 154  * @param day 155  * @return 156 */ 157 public static String plusDays(String date, int days) { 158 LocalDate localDate = parseLocalDate(date); 159 return localDate.plusDays(days).format(DateTimeFormatter.ISO_LOCAL_DATE); 160  } 161 162 /** 163  * 計算兩個日期之間相差的天數 164  * 165  * @param startDate 166  * 較小的時間 yyyy-MM-dd 167  * @param endDate 168  * 較大的時間 yyyy-MM-dd 169  * @return 相差天數 170 */ 171 public static int dateCompareTo(String startDate, String endDate) { 172 LocalDate startLocalDate = LocalDate.parse(startDate, DateTimeFormatter.ISO_LOCAL_DATE); 173 LocalDate endLocalDate = LocalDate.parse(endDate, DateTimeFormatter.ISO_LOCAL_DATE); 174 Period period = Period.between(startLocalDate, endLocalDate); 175 return period.getDays(); 176  } 177 178 public static void main(String[] args) { 179  System.out.println(getDateTimestamp()); 180  System.out.println(getDateTime()); 181 System.out.println(getLocalDate().withDayOfMonth(1)); 182  System.out.println(getLocalDate().withDayOfMonth(getLocalDate().lengthOfMonth())); 183 System.out.println(plusDays("2016-08-31", 1)); 184 System.out.println(dateCompareTo("2016-08-21", "2016-08-30")); 185  System.out.println(getClockMillis()); 186 System.out.println(LocalDateTime.parse("2016-08-31 11:39:14", formatter_DateTime) 187  .format(DateTimeFormatter.ISO_LOCAL_DATE)); 188 189  } 190 191 }

 

例子java

 1 包概述  2 java.time 包是在JDK8新引入的,提供了用於日期、時間、實例和週期的主要API。  3 java.time包定義的類表示了日期-時間概念的規則,包括instants, durations, dates, times, time-zones and periods。這些都是基於ISO日曆系統,它又是遵循 Gregorian規則的。  4 
 5 全部類都是不可變的、線程安全的。  6  
 7 一些類的介紹  8 LocalDateTime:存儲了日期和時間,如:2013-10-15T14:43:14.539。  9 LocalDate:存儲了日期,如:2013-10-15。  10 LocalTime:存儲了時間,如:14:43:14.539。  11 上面的類能夠由下面的類組合來:  12 Year:表示年份。  13 Month:表示月份。  14 YearMonth:表示年月。  15 MonthDay:表示月日。  16 DayOfWeek:存儲星期的一天。  17 
 18 類之間轉換的示例:  19 LocalDateTime localDateTime = LocalDateTime.now();  20 System.out.println("localDateTime :" + localDateTime);  21 
 22 LocalDate localDate = LocalDate.now();  23 System.out.println("localDate :" + localDate);  24 
 25 LocalTime localtime = LocalTime.now();  26 System.out.println("localtime :" + localtime);  27 
 28 // 獲取當前年份  29 Year year = Year.now();  30 System.out.println("year :" + year);  31 // 從Year獲取LocalDate  32 LocalDate localDate1 = year.atDay(59);  33 System.out.println("localDate1 :" + localDate1);  34 // 把LocalTime關聯到一個LocalDate獲得一個LocalDateTime  35 LocalDateTime localDateTime1 = localtime.atDate(localDate1);  36 System.out.println("localDateTime1 :" + localDateTime1);  37 
 38 // 用指定的年獲取一個Year  39 Year year1 = Year.of(2012);  40 System.out.println("year1 :" + year1);  41 
 42 // 從Year獲取YearMonth  43 YearMonth yearMonth = year1.atMonth(2);  44 System.out.println("yearMonth :" + yearMonth);  45 // YearMonth指定日獲得 LocalDate  46 LocalDate localDate2 = yearMonth.atDay(29);  47 System.out.println("localDate2 :" + localDate2);  48 // 判斷是不是閏年  49 System.out.println("isLeapYear :" + localDate2.isLeapYear());  50 
 51 //自動處理閏年的2月日期  52 //建立一個 MonthDay  53 MonthDay monthDay = MonthDay.of(2, 29);  54 LocalDate leapYear = monthDay.atYear(2012);  55 System.out.println("leapYear :" + leapYear);  56 
 57 //同一個 MonthDay 關聯到另外一個年份上  58 LocalDate nonLeapYear = monthDay.atYear(2011);  59 System.out.println("nonLeapYear :" + nonLeapYear);  60 
 61 上面代碼的輸出結果爲:  62 localDateTime :2013-10-15T15:11:57.489  63 localDate :2013-10-15  64 localtime :15:11:57.489  65 year :2013  66 localDate1 :2013-02-28  67 localDateTime1 :2013-02-28T15:11:57.489  68 year1 :2012  69 yearMonth :2012-02  70 localDate2 :2012-02-29  71 isLeapYear :true  72 leapYear :2012-02-29  73 nonLeapYear :2011-02-28  74 
 75 
 76 格式化與時間計算  77 DateTimeFormatter:在日期對象與字符串之間進行轉換。  78 ChronoUnit:計算出兩個時間點之間的時間距離,可按多種時間單位計算。  79 TemporalAdjuster:各類日期計算功能。  80 續前面的代碼:  81 DayOfWeek dayOfWeek = DayOfWeek.of(1);  82 System.out.println("dayOfWeek :" + dayOfWeek);  83 
 84 //計算兩個日期之間的天數,還能夠按其餘時間單位計算兩個時間點之間的間隔。  85 long between = ChronoUnit.DAYS.between(localDate, leapYear);  86 System.out.println("between :" + between);  87 
 88 // 線程安全的格式化類,不用每次都new個SimpleDateFormat  89 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("uuuu MM dd");  90 
 91 // 把日期時間轉換爲字符串標識  92 System.out.println("date formatter :" + dateTimeFormatter.format(nonLeapYear));  93 
 94 // 解析字符串形式的日期時間  95 TemporalAccessor temporalAccessor = dateTimeFormatter.parse("2013 01 15");  96 System.out.println("temporalAccessor :" + LocalDate.from(temporalAccessor));  97 
 98 Instant instant = Instant.now(); // 時間戳  99 System.out.println("instant :" + instant); 100 
101 //計算某月的第一天的日期 102 LocalDate with = nonLeapYear.with(TemporalAdjuster.firstDayOfMonth()); 103 System.out.println("with :" + with); 104 
105 // 計算某月的第一個星期一的日期 106 TemporalAdjuster temporalAdjuster = TemporalAdjuster.firstInMonth(DayOfWeek.MONDAY); 107 LocalDate with1 = localDate.with(temporalAdjuster); 108 System.out.println("with1 :" + with1); 109 
110 // 計算localDate的下一個星期一的日期 111 LocalDate with2 = localDate.with(TemporalAdjuster.next(DayOfWeek.MONDAY)); 112 System.out.println("with2 :" + with2); 113 輸出: 114 dayOfWeek :MONDAY 115 between :-594 116 date formatter :2011 02 28 117 temporalAccessor :2013-01-15 118 instant :2013-10-15T07:55:30.964Z 119 with :2011-02-01 120 with1 :2013-10-07 121 with2 :2013-10-21 122 
123 
124 java.util.Date到新庫類的轉換 125 轉換可經過下面的方法進行。 126 Date.toInstant() 127 Date.from(Instant) 128 Calendar.toInstant() 129 方法概覽 130 該包的API提供了大量相關的方法,這些方法通常有一致的方法前綴: 131 of:靜態工廠方法。 132 parse:靜態工廠方法,關注於解析。 133 get:獲取某些東西的值。 134 is:檢查某些東西的是不是true。 135 with:不可變的setter等價物。 136 plus:加一些量到某個對象。 137 minus:從某個對象減去一些量。 138 to:轉換到另外一個類型。 139 at:把這個對象與另外一個對象組合起來,例如:date.atTime(time)。
相關文章
相關標籤/搜索