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);
        }
    }
  • 相关阅读:
    flock对文件锁定读写操作的问题 简单
    hdu 2899 Strange Fuction(二分)
    hdu 2199 Can you solve this equation? (二分)
    poj 3080 Blue Jeans (KMP)
    poj 2823 Sliding Window (单调队列)
    poj 2001 Shortest Prefixes (trie)
    poj 2503 Babelfish (trie)
    poj 1936 All in All
    hdu 3507 Print Article (DP, Monotone Queue)
    fzu 1894 志愿者选拔 (单调队列)
  • 原文地址:https://www.cnblogs.com/shihaiming/p/11082205.html
Copyright © 2011-2022 走看看