Java8 日期/时间 工具类

本文详细介绍了一个Java日期时间操作工具类的实现,包括日期时间字符串与时间戳的相互转换、日期时间与字符串的相互转换等功能,适用于各种日期时间处理需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值