• 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)。
  • 相关阅读:
    使用gitblit搭建一个简单的局域网服务器
    Git的一些基本操作和命令
    oracle 常用函数
    Windows 下用 gogs 配置局域网 git server
    慎用 new、delete
    探究functools模块wraps装饰器的用途
    处理QMenu的triggered信号时遇到的一个问题
    浅析MySQL中exists与in的使用
    java-工具类-读取配置文件
    Java web的基本概念
  • 原文地址:https://www.cnblogs.com/guoziyi/p/6178668.html
Copyright © 2020-2023  润新知