DateUtil日期工具类总结

概述

日期工具类,封装一些日期相关的方法。
(未完待续。。。)

代码

package com.wzh.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期工具类
 * 
 * @author weizhenhui
 * @date 2020/9/24 9:08
 */

public class DateUtil {

    public static final String PATTERN_01 = "yyyyMMdd";
    public static final String PATTERN_02 = "yyyy-MM-dd";
    public static final String PATTERN_03 = "yyyyMMddHHmmss";
    public static final String PATTERN_04 = "yyyy-MM-dd HH:mm:ss";

    /**
     * 按给定的格式获取当前日期的字符串
     *
     * @date: 2021/1/25 15:10
     */
    public static String getDateString(String pattern) {
        Date date = new Date();
        DateFormat df = new SimpleDateFormat(pattern);
        String datestr = df.format(date);

        return datestr;
    }

    /**
     * @description : 获取N天后的日期(N为负数时往前推)
     * @date 2021/1/25 15:15
     */
    public static String getDateByNum(String pattern, Integer num) {
        if (null == num) {
            num = 1;
        }
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        // 把日期往后增加一天.整数往后推,负数往前移动
        calendar.add(Calendar.DATE, num);
        // 这个时间就是日期往后推一天的结果
        date = calendar.getTime();

        DateFormat df = new SimpleDateFormat(pattern);
        String datestr = df.format(date);

        return datestr;
    }

    /**
     * @description : 日期格式装换
     * @date 2020/10/16 18:18
     */
    public static String formatDateString(String oldDate, String sourcePattern, String targetPattern) {
        String dataStr;
        try {
            DateFormat df1 = new SimpleDateFormat(sourcePattern);
            Date date = df1.parse(oldDate);
            DateFormat df2 = new SimpleDateFormat(targetPattern);
            dataStr = df2.format(date);
        } catch (ParseException e) {
            dataStr = oldDate;
        }
        return dataStr;
    }

    /**
     * 判断两个日期是否是同一周
     * 思路: 因为1970年1月1是周四,所以(天数+4)/7 取整就是周数,如果相同就是同一周,反之就不是(是以星期一作为每周的第一天的)
     *
     * @param dateStr01 yyyy-MM-dd
     * @param dateStr02 yyyy-MM-dd
     * @return
     */
    public static boolean isSameWeek(String dateStr01, String dateStr02, String pattern) {
        boolean flag = false;
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        Date date01;
        Date date02;
        try {
            date01 = sdf.parse(dateStr01);
            date02 = sdf.parse(dateStr02);
        } catch (ParseException e) {
            return false;
        }
        if (null == date01 || null == date02) {
            return false;
        }
        // 一天的毫秒数
        long dayMillisecond = 1000 * 60 * 60 * 24;
        // 计算两个日期的周数
        long week01 = ((date01.getTime() / dayMillisecond) + 4) / 7;
        long week02 = ((date02.getTime() / dayMillisecond) + 4) / 7;
        // 如果两个日期周数相同说明在同一周
        if (week01 == week02) {
            flag = true;
        }

        return flag;
    }

    /**
     * 计算当期日期的周数
     * 1970年1月1是周四,所以(天数+4)/7 取整就是周数
     *
     * @return
     */
    public static long getNowWeekNum() {
        Date nowDate = new Date();
        // 去掉时分秒,否则周日的周数有误差
        SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_02);
        String newDateStr = sdf.format(nowDate);
        Date targetDate;
        try {
            targetDate = sdf.parse(newDateStr);
        } catch (ParseException e) {
            targetDate = new Date();
        }
        // 一天的毫秒数
        long dayMillisecond = 1000 * 60 * 60 * 24;
        long weekNum = ((targetDate.getTime() / dayMillisecond) + 4) / 7;

        return weekNum;
    }
}

使用案例

import com.wzh.utils.DateUtil;

/**
 * DateUtil 方法测试
 * @date 2021/4/30 9:45
 */
public class DateUtilTest {
    public static void main(String[] args) {
        System.out.println("当前时间:" + DateUtil.getDateString(DateUtil.PATTERN_04));
        System.out.println("4天后的日期是:" + DateUtil.getDateByNum(DateUtil.PATTERN_02, 4));
        System.out.println("格式化后的日期是:" + DateUtil.formatDateString("20210430095124", DateUtil.PATTERN_03, DateUtil.PATTERN_04));
        System.out.println("20210430跟20210505是否在同一周:" + DateUtil.isSameWeek("20210430", "20210505", DateUtil.PATTERN_01));
        System.out.println("当前日期是第几周:" + DateUtil.getNowWeekNum());
    }
}

输出结果:

当前时间:2021-04-30 09:57:09
4天后的日期是:2021-05-04
格式化后的日期是:2021-04-30 09:51:24
20210430跟20210505是否在同一周:false
当前日期是第几周:2678

版权声明:本文为qq_21758475原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。