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)。
相关文章
相关标签/搜索