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")));
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章