Java8 日期/时间 工具类


import org.apache.commons.lang3.StringUtils;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Locale;

/**
 * 日期/时间 工具类
 *
 * @author wongH
 * @date 2020/6/15 10:27
 * @Version 1.0
 */
public class DateTimeUtil {

    public static void main(String[] args) {
        Long dateStamp = string2TimeStamp("2020-04-12", "yyyy-MM-dd", true);
        System.err.println("1===>  " + dateStamp);

        Long timeStamp = string2TimeStamp("2020-04-12 12:59:59", "yyyy-MM-dd HH:mm:ss", false);
        System.err.println("2===>  " + timeStamp);

        String timeStamp2Date = timeStamp2Date(dateStamp, "yyyy-MM-dd");
        System.err.println("3===>  " + timeStamp2Date);

        String timeStamp2Time = timeStamp2Date(timeStamp, "yyyy-MM-dd HH:mm:ss");
        System.err.println("4===>  " + timeStamp2Time);

        String date2String = date2String(new Date(), "yyyy-MM-dd");
        System.err.println("5===>  " + date2String);

        String time2String = date2String(new Date(), "yyyy-MM-dd HH:mm:ss");
        System.err.println("6===>  " + time2String);

        Date date = string2Date(date2String, "yyyy-MM-dd", true);
        System.err.println("7===>  " + date);

        Date time = string2Date(time2String, "yyyy-MM-dd HH:mm:ss", false);
        System.err.println("8===>  " + time);
    }

    /**
     * 日期/时间 字符串 转 时间戳
     *
     * @param dateTime 日期或者时间 字符串。如 日期 :"2020-04-12"   时间: "2020-04-12 12:59:59"
     * @param pattern  日期或者时间 格式。  如 日期 :"yyyy-MM-dd"   时间: "yyyy-MM-dd HH:mm:ss"
     * @param isDate   是否为日期  @dateTime 为日期则传 true,否则false
     * @return 时间戳 毫秒
     */
    public static Long string2TimeStamp(String dateTime, String pattern, Boolean isDate) {
        DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern(pattern, Locale.CHINA);
        if (isDate) {
            LocalDate parse = LocalDate.parse(dateTime, ofPattern);
            return parse.atStartOfDay().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        } else {
            LocalDateTime parse = LocalDateTime.parse(dateTime, ofPattern);
            return parse.toInstant(ZoneOffset.of("+8")).toEpochMilli();
        }
    }

    /**
     * 时间戳  转  日期/时间 字符串
     *
     * @param seconds 时间戳  13位毫秒
     * @param pattern 时间格式  如 "yyyy-MM-dd HH:mm:ss"
     * @return 格式化的时间
     */
    public static String timeStamp2Date(Long seconds, String pattern) {
        if (StringUtils.isEmpty(pattern)) {
            pattern = "yyyy-MM-dd HH:mm:ss";
        }
        String time = null;
        LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds / 1000L, 0, ZoneOffset.ofHours(8));
        if (seconds != 0) {
            time = dateTime.format(DateTimeFormatter.ofPattern(pattern));
        }
        return time;
    }

    /**
     * 日期/时间 转 字符串
     *
     * @param date    日期或者时间 字符串。如 日期 :"2020-04-12"   时间: "2020-04-12 12:59:59"
     * @param pattern 日期或者时间 格式。  如 日期 :"yyyy-MM-dd"   时间: "yyyy-MM-dd HH:mm:ss"
     * @return 格式化的时间
     */
    public static String date2String(Date date, String pattern) {
        DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern(pattern, Locale.CHINA);
        LocalDateTime localDateTime = date2LocalDateTime(date);
        return ofPattern.format(localDateTime);
    }

    /**
     * 字符串  转 日期/时间
     *
     * @param date    日期或者时间 字符串。如 日期 :"2020-04-12"   时间: "2020-04-12 12:59:59"
     * @param pattern 日期或者时间 格式。  如 日期 :"yyyy-MM-dd"   时间: "yyyy-MM-dd HH:mm:ss"
     * @return 格式化的时间 Date
     */
    public static Date string2Date(String date, String pattern, Boolean isDate) {
        DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern(pattern, Locale.CHINA);
        if (isDate) {
            LocalDate localDate = LocalDate.parse(date, ofPattern);
            return localDate2Date(localDate);
        } else {
            LocalDateTime localDateTime = LocalDateTime.parse(date, ofPattern);
            return localDateTime2Date(localDateTime);
        }
    }





    //==============================================================================================================================

    /**
     * 将java.util.Date 转换为java8 的java.time.LocalDateTime,默认时区为东8区
     */
    public static LocalDateTime date2LocalDateTime(Date date) {
        return date.toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
    }


    /**
     * 将java8 的 java.time.LocalDateTime 转换为 java.util.Date,默认时区为东8区
     */
    public static Date localDateTime2Date(LocalDateTime localDateTime) {
        return Date.from(localDateTime.toInstant(ZoneOffset.of("+8")));
    }

    /**
     * 将java8 的 java.time.LocalDate 转换为 java.util.Date,默认时区为东8区
     */
    public static Date localDate2Date(LocalDate localDate) {
        return Date.from(localDate.atStartOfDay().toInstant(ZoneOffset.of("+8")));
    }

}

你可能感兴趣的:(Java)