前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 星期几、得周一、得周日、上周、下周、相差、日期工具类

java 星期几、得周一、得周日、上周、下周、相差、日期工具类

作者头像
微风-- 轻许--
发布2022-04-13 15:07:25
8590
发布2022-04-13 15:07:25
举报
文章被收录于专栏:java 微风java 微风
代码语言:javascript
复制
import org.apache.commons.lang3.StringUtils;

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

/**
 * 日期工具类
 *
 * @author silence
 * @version 2017/12/24
 */
public class DateUtil {

    private static final String YYYY_MM_DD = "yyyy-MM-dd";
    public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
    public static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm:ss");
    public static final int DAYS_OF_ONE_WEEK = 7;


    /**
     * 查当前日期是一周中的第几天、星期几
     * @return
     */
    public static long getWhicthDay(Date today){

        Calendar cal = Calendar.getInstance();
        cal.setTime(today);
        // 1=Sunday,2=Monday,,,7=Saturday。
        return cal.get(Calendar.DAY_OF_WEEK);
    }
    /**
     * 判断日期是否相等 年/月/日相等 就是相等了
     *
     * @param day1
     * @param day2
     * @return
     */
    public static boolean isDateEqualToday(Date day1, Date day2) {
        return day1.getYear() == day2.getYear()
                && day1.getMonth() == day2.getMonth()
                && day1.getDay() == day2.getDay();
    }

    /**
     * 计算距离baseDate 若干天的 日期
     * days=2 表示2天后
     * days=-1 一天前
     *
     * @param baseDate 日期 null 表示当前日期
     * @param days     日期
     * @return
     */
    public static Date daysBetweenWeeks(Date baseDate, int days) {
        Calendar c = Calendar.getInstance();
        if (baseDate != null)
            c.setTime(baseDate);

        c.add(Calendar.DAY_OF_MONTH, days);
        return c.getTime();
    }

    public static java.sql.Date fromUtilDate(Date utilDate) {
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
        return sqlDate;
    }


//    public static Date lastMonday() {
//        Date _7daysBefore = daysBetweenWeeks(null, -DAYS_OF_ONE_WEEK);
//        return mondayOfThisWeek(_7daysBefore);
//    }
//
//    public static Date lastSunday() {
//        Date _7daysBefore = daysBetweenWeeks(null, -DAYS_OF_ONE_WEEK);
//        return sundayOfThisWeek(_7daysBefore);
//    }

    /**
     * 获取某个日期对应的 日期 的周一
     *
     * @param theDate 某个日期 null的话,表示当前日期
     * @return Date
     */
    public static Date mondayOfThisWeek(Date theDate) {
        Calendar c = Calendar.getInstance();
        if (theDate != null) c.setTime(theDate);
        c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // 获取 周一
        return c.getTime();
    }

       /**
     * 获取某个日期对应的 日期 的周日
     *
     * @param theDate 某个日期 null的话,表示当前日期
     *                获取当前日期的周7,注意 日历获取的周期是
     *                周日,1,2,3,4,5,6  不是中国传统的
     *                1,2,3,4,5,6,周日
     *                所以要加7
     * @return Date
     */
    public static Date sundayOfThisWeek(Date theDate) {
        Calendar c = Calendar.getInstance();
        if (theDate != null) c.setTime(theDate);
        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);               // 获取 周日
        c.add(Calendar.DAY_OF_MONTH, 7);     // 获取 中国意义上的 周日
        return c.getTime();
    }

    /**
     * 获取某个日期对应的 日期 的周日
     *
     * @param theDate 某个日期 null的话,表示当前日期
     *                获取当前日期的周7,注意 日历获取的周期是
     *                周日,1,2,3,4,5,6  不是中国传统的
     *                1,2,3,4,5,6,周日
     *                所以要加7
     * @return Date
     */
    public static Date getSundayOfThisWeek(Date theDate) {
        Calendar c = Calendar.getInstance();
        if (theDate != null) c.setTime(theDate);
        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);               // 获取 周日
        c.add(Calendar.DAY_OF_MONTH, 7);     // 获取 中国意义上的 周日
        if(getWhicthDay(theDate)==1){
            c.add(Calendar.DATE, c.getFirstDayOfWeek() - 8);
        }
        return c.getTime();
    }

    /**
     * 字符串转换为日期类型
     *
     * @param dateString
     * @return
     */
    public static Date stringToDate(String dateString) {

        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return sdf.parse(dateString);
        } catch (ParseException e) {
            System.out.println(e.getMessage());
        }
        return null;
    }


    public static String dateToString(Date date) {

        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return sdf.format(date);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return date.toString();
    }

    /**
     * YYYY:MM:DD hh:mm:ss --->YYYY:MM:DD
     *
     * @param date
     * @return
     */
    public static Date timeToDate(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String s = sdf.format(date);
        try {
            return sdf.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取某天当前周的周一
     * @param date
     * @return
     */
    public static Date getThisWeekMonday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        // 获得当前日期是一个星期的第几天
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        // 获得当前日期是一个星期的第几天
        int day = cal.get(Calendar.DAY_OF_WEEK);
        // 根据日历的规则,当前日期减去 星期几与一个星期第一天的差值  即可计算当前周期第一天
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
        return cal.getTime();
    }

    /**
     * 获取某天上周一的日期
     *
     * @param date
     * @return
     */
    public static Date geLastWeekMonday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getThisWeekMonday(date));
        cal.add(Calendar.DATE, -7);
        return cal.getTime();
    }

    /**
     * 获取某天下周一的日期
     *
     * @param date
     * @return
     */
    public static Date getNextWeekMonday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getThisWeekMonday(date));
        cal.add(Calendar.DATE, 7);
        return cal.getTime();
    }

    /**
     * 获取某天的前后几天的日期
     *
     * @param date
     * @param day  :正数表示后几天,负数表示前几天
     * @return
     */
    public static Date addDay(Date date, int day) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE, day);
        return cal.getTime();
    }

    /**
     * 添加时间
     *
     * @param date
     * @param time hh:mm:ss
     * @return
     */
    public static Date addTime(Date date, String time) {
        if (StringUtils.isEmpty(time)) return date;
        Calendar cd = Calendar.getInstance();
        cd.setTime(date);

        String[] times = time.split(":");//eg:["01","00","00"]
        int[] timeUnit = {Calendar.HOUR, Calendar.MINUTE, Calendar.SECOND};
        if (date != null) {
            for (int i = 0; i < times.length; i++) {
                cd.add(timeUnit[i], Integer.valueOf(times[i]));
            }
        }
        return cd.getTime();
    }

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档