时间工具类

2023-12-25 19:48:03
package com.ynkbny.common.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

/**
 * timestamp 时间工具类
 */
public  class TimestampUtils {
    /**
     * 日期转字符串
     *
     * @param date 日期
     * @return {@link String}
     */
    public static String dateToString(Date date){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(date);
    }

    /**
     * 时间转字符串
     *
     * @param date 日期
     * @return {@link String}
     */
    public static String dateToStringTime(Date date){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }
    public static Date stringToDate(String dateString) throws ParseException {
        DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return formatter.parse(dateString);
    }

    /**
     * 获取当天零点时间戳
     *
     * @return long
     */
    public static long getZeroTimeStamp(){
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        long zeroTimestamp = calendar.getTimeInMillis();
        return zeroTimestamp/1000L;
    }

    /**
     * 获得0点时间的日期
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getStartOfDay(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 获取前一天的日期
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getYesterDayOfDay(Date date){
        // 使用Calendar类进行日期操作
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_YEAR, -1);
        return calendar.getTime();
    }
    public static Date getTomorrowOfDay(Date date){
        // 使用Calendar类进行日期操作
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_YEAR, 1);
        return calendar.getTime();
    }


    /**
     * 获取此时此刻时间戳
     *
     * @return long
     */
    public static long getTodayTimeStamp(){
        long timestamp = System.currentTimeMillis();
        return timestamp/1000L;
    }

    /**
     * timestamp 时间戳转时间字符串
     *
     * @param timestamp 时间戳
     * @return {@link String}
     */
    public static String timestampToTime(long timestamp){
        Date date = new Date(timestamp*1000L);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 定义日期格式
       return sdf.format(date);
    }

    /**
     * 时间字符串转时间
     *
     * @param time 时间
     * @return long
     * @throws ParseException 解析异常
     */
    public static long timeToTimestamp(String time) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse(time);
        return date.getTime()/1000L;
    }

    /**
     * 获取5分钟前的时间戳
     *
     * @return long
     * @throws ParseException 解析异常
     */
    public static  long getFiveBeforeTimestamp() throws ParseException {
        Calendar myTime = Calendar.getInstance();
        myTime.add(Calendar.MINUTE,-5);
        Date beforeM = myTime.getTime();
        String beforeM5 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(beforeM);
        return TimestampUtils.timeToTimestamp(beforeM5);
    }

    /**
     * 获取一天前的时间
     *
     * @return {@link Date}
     */
    public static Date getBeforeOneDayTime(){
        Date currentDate = new Date();
        // 使用Calendar类进行日期操作
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(currentDate);
        calendar.add(Calendar.DAY_OF_YEAR, -1);
        return calendar.getTime();
    }

    /**
     * 在获得一小时之前的时间
     *
     * @return {@link Date}
     */
    public static Date getBeforeOneHourTime(){
        Date currentDate = new Date();
        // 使用Calendar类进行日期操作
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(currentDate);
        calendar.add(Calendar.HOUR, -1);
        return calendar.getTime();
    }

    /**
     * 获取月初时间
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getStartOfMonth(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 上个月开始时间
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getStartOfLastMonth(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, -1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 获取月末时间
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getEndOfMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTime();
    }

    /**
     * 获取上月底时间
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getEndOfLastMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, -1);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTime();
    }

    /**
     * 获取传入时间的上一年的开始时间
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getStartOfLastYear(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, -1);
        calendar.set(Calendar.MONTH, Calendar.JANUARY);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 获得传入时间上一年的结束时间
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getEndOfLastYear(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, -1);
        calendar.set(Calendar.MONTH, Calendar.DECEMBER);
        calendar.set(Calendar.DAY_OF_MONTH, 31);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTime();
    }

    /**
     * 获取传入时间的当前年的开始时间
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getStartOfYear(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.MONTH, Calendar.JANUARY);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 获得传入时间当前年的结束时间
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getEndOfYear(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.MONTH, Calendar.DECEMBER);
        calendar.set(Calendar.DAY_OF_MONTH, 31);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTime();
    }

    /**
     * 获得明天 的日期
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getTomorrow(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());

        //先取得今天的日历日时间
        Calendar calendar = new GregorianCalendar();

        //转换得到今天的日期
        String today = sdf.format(date);
        calendar.setTime(date);

        //转换得倒明天的日期
        calendar.add(Calendar.DATE, 1);
        System.out.println(calendar.getTime());
        return calendar.getTime();
    }

    /**
     * 获得昨天 的日期
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getYesterday(Date date) {
        // 获取当前时间的 Calendar 对象
        Calendar calendar = Calendar.getInstance();

        // 将 Calendar 对象的时间设置为当前时间
        calendar.setTime(date);

        // 将当前时间减去一天
        calendar.add(Calendar.DAY_OF_MONTH, -1);

        // 获取减去一天后的日期
        Date previousDay = calendar.getTime();

        // 输出减去一天后的日期
        System.out.println(previousDay);
        return previousDay;
    }

    /**
     * 获得 下周一 的日期
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getNextWeek1(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);

        // 获得当前日期是一个星期的第几天
        int dayWeek = calendar.get(Calendar.DAY_OF_WEEK);
        if (1 == dayWeek) {
            calendar.add(Calendar.DAY_OF_MONTH, -1);
        }

        // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
        calendar.setFirstDayOfWeek(Calendar.MONDAY);

        // 获得当前日期是一个星期的第几天
        int day = calendar.get(Calendar.DAY_OF_WEEK);

        // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
        calendar.add(Calendar.DATE, calendar.getFirstDayOfWeek() - day);

        calendar.setTime(calendar.getTime());
        calendar.add(Calendar.DATE, 7);

        return calendar.getTime();
    }

    /**
     * 获得 下周天 的日期
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date getNextWeek7(Date date) {
        // 将java.util.Date转换为java.time.LocalDate
        LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

        // 1为周一 以此类推 7为周日。
        LocalDate localDate1 = localDate.with(TemporalAdjusters.next(DayOfWeek.of(7)));

        // LocalDate 转 Date
        ZoneId zoneId = ZoneId.systemDefault();
        Date date2 = Date.from(localDate1.atStartOfDay().atZone(zoneId).toInstant());
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date2);

        return calendar.getTime();
    }

    /**
     * 获取 下月 的第一天
     *
     * @param date 日期
     * @return 结果
     */
    public static Date firstDayOfNextMonth(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.MONTH, 1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        return calendar.getTime();
    }

    /**
     * 获取 下年 的第一天
     *
     * @param date 日期
     * @return 结果
     */
    public static Date firstDayOfNextYear(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR, 1);
        calendar.set(Calendar.MONTH, 0);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        return calendar.getTime();
    }

//    public static void main(String[] args) {
//        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
//        String getTomorrow = sdf1.format(getTomorrow(new Date()));
//        String getNextWeek1 = sdf1.format(getNextWeek1(new Date()));
//        String getNextWeek7 = sdf1.format(getNextWeek7(getNextWeek1(new Date())));
//        String firstDayOfNextMonth = sdf1.format(firstDayOfNextMonth(new Date()));
//        String firstDayOfNextYear = sdf1.format(firstDayOfNextYear(new Date()));
//        System.out.println("明天的日期"+getTomorrow);
//        System.out.println("下周一的日期"+getNextWeek1);
//        System.out.println("下周天的日期"+getNextWeek7);
//        System.out.println("下月第一天的日期"+firstDayOfNextMonth);
//        System.out.println("下年第一天的日期"+firstDayOfNextYear);
//    }
}
日期转字符串
时间转字符串
获取当天零点时间戳
获得0点时间的日期
获取前一天的日期
获取此时此刻时间戳
时间戳转时间字符串
时间字符串转时间
获取5分钟前的时间戳
获取一天前的时间
在获得一小时之前的时间
获取月初时间
上个月开始时间
获取月末时间
获取上月底时间
获取传入时间的上一年的开始时间
获得传入时间上一年的结束时间
获取传入时间的当前年的开始时间
获得传入时间当前年的结束时间
获得明天 的日期
获得昨天 的日期
获得 下周一 的日期
获得 下周天 的日期
获取 下月 的第一天
获取 下年 的第一天

文章来源:https://blog.csdn.net/m0_58660225/article/details/135205585
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。