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 }

 

例子

  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)。

 

posted @ 2016-12-14 11:40  GL_BKY  阅读(2135)  评论(0编辑  收藏  举报