java日期常用方法

java日期常用方法

效果图,相关的方法
在这里插入图片描述

直接上代码了,能想到的都写下来了,如果缺什么评论区留言,接着补充

import org.apache.commons.lang3.StringUtils;

import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

/***
 * @ClassName: DateDemo
 * @Description:
 * @Auther: 施某人
 */
public class DateDemo {

    private static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
    public static final String YYYY_MM_DD = "yyyy-MM-dd";

    public static void main(String[] args) throws ParseException {
        //获取当前时间
        SimpleDateFormat sdfYYYY_MM_DD = new SimpleDateFormat(YYYY_MM_DD);
        SimpleDateFormat sdfYYYY_MM_DD_HH_MM_SS = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
        System.out.println("获取当前时间年月日:"+sdfYYYY_MM_DD.format(new Date()));
        System.out.println("获取当前时间年月日时分秒:"+sdfYYYY_MM_DD_HH_MM_SS.format(new Date()));

        //给当前时间增加多少天
        Date str = sdfYYYY_MM_DD.parse(sdfYYYY_MM_DD.format(new Date()));
        Calendar cal = Calendar.getInstance();
        cal.setTime(str);
        int index = 7;
        //增加index天
        cal.add(Calendar.DAY_OF_MONTH, index);
        Date lastTime = cal.getTime();
        System.out.println("增加了"+index+"天后的时间:"+sdfYYYY_MM_DD.format(lastTime));

        String hour = sdfYYYY_MM_DD_HH_MM_SS.format(new Date()).substring(11, 13);
        System.out.println("获取当前时间的小时:"+hour);

        String min = sdfYYYY_MM_DD_HH_MM_SS.format(new Date()).substring(14, 16);
        System.out.println("获取当前时间的分钟:"+min);

        Date date = new Date();
        // lastTime.getTime()  当前时间7天后的时间
        long day = (lastTime.getTime() - date.getTime()) / (24 * 60 * 60 * 1000);
        System.out.println("两个时间间隔的天数:"+day);

        //当前时间  前移 或 延后  delay分钟
        int delay = 20;
        cal.setTime(date);
        cal.add(Calendar.MINUTE, delay);//延后20分钟
        Date delayTime = cal.getTime();
        System.out.println("当前时间延后了"+index+"分钟:"+sdfYYYY_MM_DD_HH_MM_SS.format(delayTime));

       // 当前时间延后或前移几天的时间,date为当前时间,delayDay为前移或后延的天数
        int delayDay = -7;
        Date d = strToDate(sdfYYYY_MM_DD.format(date), YYYY_MM_DD);
        long myTime = (d.getTime() / 1000) + delayDay * 24 * 60 * 60;
        d.setTime(myTime * 1000);
        String mdate = sdfYYYY_MM_DD.format(d);
        System.out.println("当前时间延后"+delayDay+"天:"+mdate);

        //获取本月第一天
        cal.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
        Date firstTime = cal.getTime();
        System.out.println("获取本月第一天时间:"+sdfYYYY_MM_DD.format(firstTime));

        //获取本月最后一天
        String str1 = sdfYYYY_MM_DD.format(new Date()).substring(0, 8);
        String month = sdfYYYY_MM_DD.format(new Date()).substring(5, 7);
        int mon = Integer.parseInt(month);
        if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) {
            str1 += "31";
        } else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {
            str1 += "30";
        } else {
            if (isLeapYear(sdfYYYY_MM_DD.format(new Date()))) {
                str1 += "29";
            } else {
                str1 += "28";
            }
        }
        System.out.println("本月最后一天是:"+str1);

        Calendar c = Calendar.getInstance(Locale.CHINA);
        String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));
        if (week.length() == 1)
            week = "0" + week;
        String year = Integer.toString(c.get(Calendar.YEAR));
        System.out.println("当前时间是"+year+"年第" + week+"周");

        //根据一个日期判断是星期几
        String sdate = "2020-02-02";
        Date weekDay = DateUtil.strToDate(sdate, YYYY_MM_DD);
        c.setTime(weekDay);
        // int hour=c.get(Calendar.DAY_OF_WEEK);
        // hour中存的就是星期几了,其范围 1~7
        // 1=星期日 7=星期六,其他类推
       System.out.println(sdate+"那天是:"+new SimpleDateFormat("EEEE").format(c.getTime()));

       //两个时间相差多少天
        c.set(Calendar.DATE,31);
        c.set(Calendar.MONTH,11);
        c.set(Calendar.YEAR,2021);
        long daySize = (date.getTime() - c.getTime().getTime()) / (24 * 60 * 60 * 1000);
        System.out.println("当前时间与"+sdfYYYY_MM_DD.format(c.getTime())+"相差:"+daySize+"天");
    }

    //判断是否为闰年
    public static boolean isLeapYear(String ddate) {
        /**
         * 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
         * 3.能被4整除同时能被100整除则不是闰年
         */
        Date d = strToDate(ddate, YYYY_MM_DD);
        GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
        gc.setTime(d);
        int year = gc.get(Calendar.YEAR);
        if ((year % 400) == 0)
            return true;
        else if ((year % 4) == 0) {
            if ((year % 100) == 0)
                return false;
            else
                return true;
        } else
            return false;
    }

    /**
     * 判断两个时间是否是同一周
     * @param date1
     * @param date2
     * @return
     */
    public static boolean isSameWeekDates(Date date1, Date date2) {
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        cal1.setTime(date1);
        cal2.setTime(date2);
        int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
        if (0 == subYear) {
            if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
                return true;
        } else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
            // 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
            if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
                return true;
        } else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
            if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
                return true;
        }
        return false;
    }

    public static Date strToDate(String strDate, String format) {
        if (StringUtils.isEmpty(strDate)) {
            return null;
        }
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        ParsePosition pos = new ParsePosition(0);
        return formatter.parse(strDate, pos);
    }

}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值