zoukankan      html  css  js  c++  java
  • 基于Java8的日期时间工具类DateTimeFormatter

    原文:https://blog.csdn.net/qq_36596145/article/details/85331002

    import java.time.Instant;
    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.LocalTime;
    import java.time.ZoneId;
    import java.time.ZonedDateTime;
    import java.time.format.DateTimeFormatter;
    import java.time.temporal.ChronoField;
    import java.util.Date;
    
    /**
     * 基于Java8的时间工具类
     *
     * @author keji
     * @version $Id: DateUtil.java, v 0.1 2018-12-28 14:11 keji Exp $
     */
    public class DateUtil {
    
        /**
         * 例如:2018-12-28
         */
        public static final String DATE = "yyyy-MM-dd";
        /**
         * 例如:2018-12-28 10:00:00
         */
        public static final String DATE_TIME = "yyyy-MM-dd HH:mm:ss";
        /**
         * 例如:10:00:00
         */
        public static final String TIME = "HHmmss";
        /**
         * 例如:10:00
         */
        public static final String TIME_WITHOUT_SECOND = "HH:mm";
    
        /**
         * 例如:2018-12-28 10:00
         */
        public static final String DATE_TIME_WITHOUT_SECONDS = "yyyy-MM-dd HH:mm";
    
    
        /**
         * 获取年
         *
         * @return*/
        public static int getYear() {
            LocalTime localTime = LocalTime.now();
            return localTime.get(ChronoField.YEAR);
        }
    
        /**
         * 获取月份
         *
         * @return 月份
         */
        public static int getMonth() {
            LocalTime localTime = LocalTime.now();
            return localTime.get(ChronoField.MONTH_OF_YEAR);
        }
    
        /**
         * 获取某月的第几天
         *
         * @return 几号
         */
        public static int getMonthOfDay() {
            LocalTime localTime = LocalTime.now();
            return localTime.get(ChronoField.DAY_OF_MONTH);
        }
    
        /**
         * 格式化日期为字符串
         *
         * @param date date
         * @param pattern 格式
         * @return 日期字符串
         */
        public static String format(Date date,String pattern){
    
            Instant instant = date.toInstant();
    
            LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
    
            return localDateTime.format(DateTimeFormatter.ofPattern(pattern));
        }
    
        /**
         * 解析字符串日期为Date
         *
         * @param dateStr 日期字符串
         * @param pattern 格式
         * @return Date
         */
        public static Date parse(String dateStr, String pattern) {
    
            LocalDateTime localDateTime = LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern(pattern));
            Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
            return Date.from(instant);
        }
    
        /**
         * 为Date增加分钟,减传负数
         *
         * @param date        日期
         * @param plusMinutes 要增加的分钟数
         * @return 新的日期
         */
        public static Date addMinutes(Date date, Long plusMinutes) {
            LocalDateTime dateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
            LocalDateTime newDateTime = dateTime.plusMinutes(plusMinutes);
            return Date.from(newDateTime.atZone(ZoneId.systemDefault()).toInstant());
        }
    
        /**
         * 增加时间
         *
         * @param date date
         * @param hour 要增加的小时数
         * @return new date
         */
        public static Date addHour(Date date, Long hour) {
            LocalDateTime dateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
            LocalDateTime localDateTime = dateTime.plusHours(hour);
            return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
        }
    
        /**
         * @return 返回当天的起始时间
         */
        public static Date getStartTime() {
    
            LocalDateTime now = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0);
            return localDateTime2Date(now);
        }
    
    
        /**
         * @return 返回当天的结束时间
         */
        public static Date getEndTime() {
            LocalDateTime now = LocalDateTime.now().withHour(23).withMinute(59).withSecond(59).withNano(999);
            return localDateTime2Date(now);
        }
    
        /**
         * 减月份
         *
         * @param monthsToSubtract 月份
         * @return Date
         */
        public static Date minusMonths(long monthsToSubtract){
            LocalDate localDate = LocalDate.now().minusMonths(monthsToSubtract);
    
            return localDate2Date(localDate);
        }
    
        /**
         * LocalDate类型转为Date
         *
         * @param localDate LocalDate object
         * @return Date object
         */
        public static Date localDate2Date(LocalDate localDate) {
    
            ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
    
            return Date.from(zonedDateTime.toInstant());
        }
    
        /**
         * LocalDateTime类型转为Date
         *
         * @param localDateTime LocalDateTime object
         * @return Date object
         */
        public static Date localDateTime2Date(LocalDateTime localDateTime) {
            return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
        }
    
        /**
         * 查询当前年的第一天
         *
         * @param pattern 格式,默认格式yyyyMMdd
         * @return 20190101
         */
        public static String getFirstDayOfCurrentYear(String pattern) {
            LocalDateTime localDateTime = LocalDateTime.now().withMonth(1).withDayOfMonth(1);
    
            if (StringUtils.isEmpty(pattern)) {
                pattern = "yyyyMMdd";
            }
    
            return format(localDateTime2Date(localDateTime), pattern);
        }
    
        /**
         * 查询前一年最后一个月第一天
         *
         * @param pattern 格式,默认格式yyyyMMdd
         * @return 20190101
         */
        public static String getLastMonthFirstDayOfPreviousYear(String pattern) {
            LocalDateTime localDateTime = LocalDateTime.now().minusYears(1L).withMonth(12).withDayOfMonth(1);
    
            if (StringUtils.isEmpty(pattern)) {
                pattern = "yyyyMMdd";
            }
    
            return format(localDateTime2Date(localDateTime), pattern);
        }
    
        /**
         * 查询前一年最后一个月第一天
         *
         * @param pattern 格式,默认格式yyyyMMdd
         * @return 20190101
         */
        public static String getLastMonthLastDayOfPreviousYear(String pattern) {
            LocalDateTime localDateTime = LocalDateTime.now().minusYears(1L).with(TemporalAdjusters.lastDayOfYear());
    
            if (StringUtils.isEmpty(pattern)) {
                pattern = "yyyyMMdd";
            }
    
            return format(localDateTime2Date(localDateTime), pattern);
        }
    
        /**
         * 获取当前日期
         *
         * @param pattern 格式,默认格式yyyyMMdd
         * @return 20190101
         */
        public static String getCurrentDay(String pattern) {
            LocalDateTime localDateTime = LocalDateTime.now();
    
            if (StringUtils.isEmpty(pattern)) {
                pattern = "yyyyMMdd";
            }
    
            return format(localDateTime2Date(localDateTime), pattern);
        }
    }
  • 相关阅读:
    凤凰传奇
    信息孤岛
    别了,中珠
    吃苦要趁早
    触动——beyond歌词
    走出舒适区,迎接挑战
    创新永存
    信息时代
    变色龙时代——创新
    Java基本的数据类型
  • 原文地址:https://www.cnblogs.com/shihaiming/p/11082205.html
Copyright © 2011-2022 走看看