`
zysnba
  • 浏览: 185714 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java获取两个日期的天数打印

 
阅读更多
package com.xxx;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;

import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class CountDate {

    private static transient int gregorianCutoverYear = 1582;

  public static void main(String[] args) {
    //
//      List<String> everyday = getEveryday("2023-12-12", "2029-12-31");
//      System.out.println(everyday);
      System.out.println(getWeek("2023-12-18"));

  }
   public static int  getWeek(String strDay){
       int i = DateUtil.dayOfWeek(DateUtil.parse(strDay));
       if(i==1){
           i=7;
       }else{
           i=i-1;
       }
       return i;
   }
    /**
     * 闰年中每月天数
     */
    private static final int[] DAYS_P_MONTH_LY = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    /**
     * 非闰年中每月天数
     */
    private static final int[] DAYS_P_MONTH_CY = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    /**
     * 代表数组里的年、月、日
     */
    private static final int Y = 0, M = 1, D = 2;

    /**
     * 将代表日期的字符串分割为代表年月日的整形数组
     *
     * @param date
     * @return
     */
    public static Integer[] splitYMD(String date) {
        date = date.replace("-", "");
        Integer[] ymd = {0, 0, 0};
        ymd[Y] = Integer.parseInt(date.substring(0, 4));
        ymd[M] = Integer.parseInt(date.substring(4, 6));
        ymd[D] = Integer.parseInt(date.substring(6,);
        return ymd;
    }

    /**
     * 将代表日期的字符串分割为代表年月的整形数组
     *
     * @param date
     * @return
     */
    public static Integer[] splitYM(String date) {
        date = date.replace("-", "");
        Integer[] ym = {0, 0, 0};
        ym[Y] = Integer.parseInt(date.substring(0, 4));
        ym[M] = Integer.parseInt(date.substring(4, 6));
        return ym;
    }

    /**
     * 检查传入的参数代表的年份是否为闰年
     *
     * @param year
     * @return
     */
    public static boolean isLeapYear(int year) {
        return year >= gregorianCutoverYear ? ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0))) : (year % 4 == 0);
    }

    /**
     * 日期加1天
     *
     * @param year
     * @param month
     * @param day
     * @return
     */
    private static Integer[] addOneDay(int year, int month, int day) {
        if (isLeapYear(year)) {
            day++;
            if (day > DAYS_P_MONTH_LY[month - 1]) {
                month++;
                if (month > 12) {
                    year++;
                    month = 1;
                }
                day = 1;
            }
        } else {
            day++;
            if (day > DAYS_P_MONTH_CY[month - 1]) {
                month++;
                if (month > 12) {
                    year++;
                    month = 1;
                }
                day = 1;
            }
        }
        Integer[] ymd = {year, month, day};
        return ymd;
    }

    /**
     * 将不足两位的月份或日期补足为两位
     *
     * @param decimal
     * @return
     */
    public static String formatMonthDay(int decimal) {
        DecimalFormat df = new DecimalFormat("00");
        return df.format(decimal);
    }

    /**
     * 将不足四位的年份补足为四位
     *
     * @param decimal
     * @return
     */
    public static String formatYear(int decimal) {
        DecimalFormat df = new DecimalFormat("0000");
        return df.format(decimal);
    }

    /**
     * 计算两个日期之间相隔的天数
     *
     * @param begin
     * @param end
     * @return
     * @throws ParseException
     */
    public static long countDay(String begin, String end) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date beginDate, endDate;
        long day = 0;
        try {
            beginDate = format.parse(begin);
            endDate = format.parse(end);
            day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return day;
    }


    /**
     * 计算两个月份 相差多少个月 yyyy-MM
     * @param date1
     * @param date2
     * @return
     * @throws ParseException
     */
    public static int getMonthSpace(String date1, String date2)
            throws ParseException {

        int result = 0;

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");

        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();

        c1.setTime(sdf.parse(date1));
        c2.setTime(sdf.parse(date2));

        result = c2.get(Calendar.MONDAY) - c1.get(Calendar.MONTH);

        return result == 0 ? 1 : Math.abs(result);

    }

    /**
     * 以循环的方式计算日期  格式 YYYY-MM-dd
     *
     * @param beginDate
     * @param endDate
     * @return
     */
    public static List<String> getEveryday(String beginDate, String endDate) {
        long days = countDay(beginDate, endDate);
        Integer[] ymd = splitYMD(beginDate);
        List<String> everyDays = new ArrayList<String>();
        everyDays.add(beginDate);
        for (int i = 0; i < days; i++) {
            ymd = addOneDay(ymd[Y], ymd[M], ymd[D]);
            everyDays.add(formatYear(ymd[Y]) + "-" + formatMonthDay(ymd[M]) + "-" + formatMonthDay(ymd[D]));
        }
        return everyDays;
    }

    /**
     * 以循环的方式计算日期  格式 YYYYMMdd
     *
     * @param beginDate
     * @param endDate
     * @return
     */
    public static List<String> getEverydayList(String beginDate, String endDate) {
        long days = countDay(beginDate, endDate);
        Integer[] ymd = splitYMD(beginDate);
        List<String> everyDays = new ArrayList<String>();
        everyDays.add(formatYear(ymd[Y]) + formatMonthDay(ymd[M]) + formatMonthDay(ymd[D]));
        for (int i = 0; i < days - 1; i++) {
            ymd = addOneDay(ymd[Y], ymd[M], ymd[D]);
            everyDays.add(formatYear(ymd[Y]) + formatMonthDay(ymd[M]) + formatMonthDay(ymd[D]));
        }
        return everyDays;
    }

    /**
     * 计算日期内所有月份
     *
     * @param beginDate
     * @param endDate
     * @return
     */
    public static List<String> getEveryMonth(String beginDate, String endDate) {
        Date start = null;
        Date end = null;
        try {
            start = new SimpleDateFormat("yyyy-MM").parse(beginDate);
            end = new SimpleDateFormat("yyyy-MM").parse(endDate);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(start);
        calendar.add(Calendar.MONTH, 1);
        // 获取开始年份和开始月份
        int startYear = calendar.get(Calendar.YEAR);
        int startMonth = calendar.get(Calendar.MONTH);
        // 获取结束年份和结束月份
        Calendar cal = Calendar.getInstance();
        cal.setTime(end);
        cal.add(Calendar.MONTH, 1);
        int endYear = cal.get(Calendar.YEAR);
        int endMonth = cal.get(Calendar.MONTH);
        //
        List<String> list = new ArrayList<String>();
        for (int i = startYear; i <= endYear; i++) {
            String date = "";
            if (startYear == endYear) {
                for (int j = startMonth; j < endMonth - 1; j++) {
                    if (j < 9) {
                        date = i + "0" + (j + 1);
                    } else {
                        date = i + "" + (j + 1);
                    }
                    list.add(date);
                }

            } else {
                if (i == startYear) {
                    for (int j = startMonth; j < 11; j++) {
                        if (j < 9) {
                            date = i + "0" + (j + 1);
                        } else {
                            date = i + "" + (j + 1);
                        }
                        list.add(date);
                    }
                } else if (i == endYear) {
                    for (int j = 0; j < endMonth - 1; j++) {
                        if (j < 9) {
                            date = i + "0" + (j + 1);
                        } else {
                            date = i + "" + (j + 1);
                        }
                        list.add(date);
                    }
                } else {
                    for (int j = 0; j < 11; j++) {
                        if (j < 9) {
                            date = i + "0" + (j + 1);
                        } else {
                            date = i + "" + (j + 1);
                        }
                        list.add(date);
                    }
                }
            }
        }
        return list;
    }

    /**
     * @param time 支持 2017-01的时间字符串格式
     * @return
     */
    public static String[] getLast12Months(String time) {
        //处理月份输入条件
        if (time.length() == 7) {
            time = time + "-01 06:00:00";
        } else if (time.length() == 110) {
            time = time.substring(0, 7) + "-01 06:00:00";
        }
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        try {
            date = sdf.parse(time);
        } catch (Exception e) {
            return null;
        }

        String[] last12Months = new String[12];
        Calendar cal = Calendar.getInstance();
        //设置输入条件时间
        cal.setTime(date);

        cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + 1); //要先+1,才能把本月的算进去
        for (int i = 0; i < 12; i++) {
            cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) - 1); //逐次往前推1个月
            last12Months[11 - i] = cal.get(Calendar.YEAR) + addZeroForNum(String.valueOf(cal.get(Calendar.MONTH) + 1), 2);
        }

        return last12Months;
    }

    public static String addZeroForNum(String str, int strLength) {
        int strLen = str.length();
        if (strLen < strLength) {
            while (strLen < strLength) {
                StringBuffer sb = new StringBuffer();
                sb.append("0").append(str);// 左补0
                // sb.append(str).append("0");//右补0
                str = sb.toString();
                strLen = str.length();
            }
        }
        return str;
    }

    /**
     * 获取当前时间往前往后n的日期
     * eg: date ==null 默认是系统当前时间  否则以date为时间起点
     * n > 0 往后
     * n = 0 当前时间
     * n < 0 往前
     *
     * @param date
     * @param n
     * @return
     * @author zhangheng5@lenovo.com
     */
    public static List<String> getBeforeDate(String date, int n) {
        DateTime dateTime = DateUtil.parseDate(date);
        List<String> list = new ArrayList<>();
        Calendar c = Calendar.getInstance();
        Date today = new Date();
        if (null != dateTime) {
            today = dateTime;
        }
        c.setTime(today);
        if (n > 0) {
            for (int i = 0; i <= n; i++) {
                c.add(Calendar.DATE, i - 1);
                list.add(new SimpleDateFormat("yyyyMMdd").format(c.getTime()));
                c.setTime(today);
            }
        } else if (n < 0) {
            for (int i = n; i <= 0; i++) {
                c.add(Calendar.DATE, i);
                list.add(new SimpleDateFormat("yyyyMMdd").format(c.getTime()));
                c.setTime(today);
            }
        } else {
            c.add(Calendar.DATE, 1);
            list.add(new SimpleDateFormat("yyyyMMdd").format(c.getTime()));
            c.setTime(today);
        }

        return list;
    }


    /**
     * 拆分年月日
     * YEARN年
     * MONTH月
     * DAYANDMONTH 带日的或者不带日的月分
     *
     * @return
     */
    public static int splitDate(String dateType, String oldDate) {
        int i = 0;
        if (StringUtils.equals(dateType, "YEAR")) {
            i = NumberUtil.parseInt(oldDate.substring(0, 4));
        }
        if (StringUtils.equals(dateType, "MONTH")) {
            String substring = oldDate.substring(oldDate.length() - 4);
            i = NumberUtil.parseInt(substring.substring(0, 2));
        }
        if (StringUtils.equals(dateType, "DAYANDMONTH")) {
            i = NumberUtil.parseInt(oldDate.substring(oldDate.length() - 2));
        }
        return i;
    }
/*   public static void main(String[] args) {
       List<String> list = CountDate.getEveryday("2020-08-29", "2022-09-02");
       for (String result : list) {
           System.out.println(result);
       }
   }*/


    /**
     * 校验时间格式
     *
     * @param type
     * @param timeStamp
     * @return
     */
    public static boolean checkDateFormat(String type, String timeStamp) {
        SimpleDateFormat format;
        boolean dateflag = true;
        if (StringUtils.equals(type, "MONTH")) {
            format = new SimpleDateFormat("yyyy-MM");
        } else {
            format = new SimpleDateFormat("yyyy-MM-dd");
        }
        try {
            format.setLenient(false);
            format.parse(timeStamp.intern());
        } catch (Exception e) {
            dateflag = false;
        }
        if (!dateflag || type.equals("MONTH") ? timeStamp.length() > 7 : timeStamp.length() > 10) {
            dateflag = false;
        }
        return dateflag;
    }


    /**
     * 获取传入时间的 起点时间  和终点时间
     *
     * @param MONTH
     * @return
     */
    public static Map<String, Object> getDateDifference(String MONTH) {
        String newMonth = MONTH.substring(0, 4) + "-" + MONTH.substring(MONTH.length() - 2);
        Map<String, Object> resuleMap = new HashMap<>();
        //指定时间往前
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        Date date = new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        Calendar oldCal = Calendar.getInstance();
        String endTime, startTime;
        if (StringUtils.isBlank(newMonth)) {
            if (1 == cal.get(Calendar.DAY_OF_MONTH)) { //第一天展示上月整月数据
                endTime = sdf.format(cal.getTime()) + "-01 06:00:00";
                oldCal.setTime(date);
                oldCal.add(Calendar.MONTH, -1);
                startTime = sdf.format(oldCal.getTime()) + "-01 06:00:00";
            } else {
                //当前月
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                endTime = format.format(cal.getTime()) + " 06:00:00";
                oldCal.setTime(date);
                startTime = sdf.format(oldCal.getTime()) + "-01 06:00:00";
            }
        } else {
            startTime = newMonth + "-01 06:00:00";
            String[] str = newMonth.split("-");
            if (Integer.valueOf(str[1]) == 12) {
                endTime = (Integer.valueOf(str[0]) + 1) + "-01-01 06:00:00";
            } else {
                endTime = str[0] + "-" + (Integer.valueOf(str[1]) + 1) + "-01 06:00:00";
            }

        }
        resuleMap.put("startTime", startTime);
        resuleMap.put("endTime", endTime);
        return resuleMap;
    }

    /**
     * 获取当前天数时间差
     *
     * @return
     */
    public static long getDateTimesDay(String newMonth) throws ParseException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String year = newMonth.substring(0, 4);
        String month = newMonth.substring(newMonth.length() - 2);
        String cDate = year + "-" + month;
        DateTime date = DateUtil.date();
        String olddater = date.toString().substring(0, 7);
        if (cDate.equals(olddater)) {
            Date startDate = format.parse(cDate + "-01 06:00:00");
            Date endDate = format.parse(date.toString().substring(0, 10) + " 06:00:00");
            long count = DateUtil.between(startDate, endDate, DateUnit.DAY);
            return count;
        } else {
            return 30;
        }
    }


    /**
     * @param time 第几天
     * @param
     * @return java.lang.String
     * @description:获取当前日期前 多少 天
     * @author: yc
     * @date: 2022-08-11 13:30:49
     */
    public static List<String> getLastDays(String dateTime, int time) {
        String[] strings = dateTime.split("-");
        List<String> frontDaysList = new ArrayList<String>();
        for (int i = 0; i < time; i++) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(NumberUtils.toInt(strings[0]),NumberUtils.toInt(strings[1])-1,NumberUtils.toInt(strings[2]));
            calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - i);
            Date today = calendar.getTime();
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            frontDaysList.add(format.format(today));
        }
        Collections.reverse(frontDaysList);
        return frontDaysList;
    }

    /**
     * 获取指定时间 前 多少 月的日期集合
     * @param dateTime
     * @param size
     * @return
     */

    public static List<String> getLastMonths(String dateTime, int size) {
        String[] strings = dateTime.split("-");

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        Calendar c = Calendar.getInstance();
        c.set(NumberUtils.toInt(strings[0]), NumberUtils.toInt(strings[1]), 1);
        List<String> list = new ArrayList(size);
        for (int i = 0; i < size; i++) {
            //c.setTime(new Date());
            c.add(Calendar.MONTH, -1);
            Date m = c.getTime();
            list.add(sdf.format(m));
        }
        Collections.reverse(list);
        return list;

    }



}
分享到:
评论

相关推荐

    Java编程输入两个年月日,(1)判断两个日期是否相同,并且将相差的天数显示出来;(2)将日期后推或前推N天,并将该日期输出。

    1. 通过`JOptionPane`类获取用户输入的两个日期以及向前或向后推进的天数。 2. 创建`DateType`对象并调用其方法进行日期的比较、天数差计算以及日期的调整。 3. 输出结果。 #### 3.1 输入输出 - **输入**:使用`...

    javaScript和java中日期相减得出天数方案

    无论是使用JavaScript还是Java来计算两个日期之间的天数差,核心思想都是将日期转换为毫秒数,然后计算两者之间的差值,最后将毫秒数转换为天数。这两种语言虽然语法有所不同,但实现逻辑非常相似。掌握这种方法对于...

    java中计算两个日期相差几天

    ### Java中计算两个日期相差几天 在Java编程中,经常需要处理与日期和时间相关的操作。其中一项常见的需求就是计算两个日期之间的差距。本篇文章将详细介绍如何在Java中计算两个日期相差几天,并深入探讨示例代码中...

    获取指定两个日期之间的所以日期

    标题中提到的知识点是“获取指定两个日期之间的所有日期”。在编程中,特别是使用Java语言时,这样的需求非常普遍,尤其是在数据库操作、日志记录、报表生成等场景中经常需要计算两个日期间的天数或者日期列表。 ...

    Android编程实现计算两个日期之间天数并打印所有日期的方法

    在Android编程中,计算两个日期之间的天数以及打印这些日期是一项常见的任务,这涉及到日期时间的处理和转换。本文将详细讲解如何实现这一功能,并解释其中的关键知识点。 首先,我们注意到一个重要的细节,即在...

    打印日历(java)

    下面我们将详细讨论这两个核心知识点。 1. **Java Calendar类** `Calendar`是Java中的一个抽象类,提供了日期和时间的计算方法。它是一个通用的日历模型,可以处理各种日历系统,如公历、伊斯兰历等。要创建一个`...

    javascript获取当月天数

    - 计算两个日期之间的天数差。 - 获取上个月或下个月的天数。 通过以上分析,我们不仅了解了如何使用 JavaScript 来获取当前月份的天数,还掌握了一种通用的日期处理技巧。这将有助于我们在实际项目中更高效地进行...

    Java-Java处理日期和时间教程

    // 计算两个日期之间的天数差 long daysBetween = ChronoUnit.DAYS.between(date1, date2); // 格式化日期并打印 String formattedDate = date.format(DateTimeFormatter.ISO_DATE); System.out.println...

    根据输入的日期获取所属季度

    - 计算两个日期之间的天数差。 - 获取某个日期前后的日期。 - 计算某个月份有多少天。 2. **国际化与本地化**: - 不同国家和地区有不同的日期格式标准。 - 如何设置`SimpleDateFormat`以适应不同地区的日期格式...

    JAVA定时器时间抓取

    - 时间计算:计算两个日期之间的天数、小时数等。 通过这些DEMO,你可以更直观地了解Java在时间处理方面的功能,并在实际项目中灵活应用。记住,理解和熟练掌握这些知识点对于提升Java编程能力至关重要,因为时间...

    30个java工具类

    [工具类] Java中计算任意两个日期之间的工作天数 .java.txt [工具类] java抓取网页 .java.txt [工具类] MD5 .java.txt [工具类] MD5强化版 .java.txt [工具类] MD5超强化版 .java.txt [工具类] XML 实用工具类 .java...

    java日历打印

    此外,还可以增加功能,如计算两个日期之间的天数,或者添加节假日信息等。 通过以上步骤,我们可以创建一个简单的Java程序,根据用户输入打印出带有标记特定日期的日历。这个程序对于理解和掌握Java日期时间处理...

    java代码-计算出生天数

    3. **日期操作**:计算两个`LocalDate`对象之间的天数差值,可以使用`ChronoUnit.DAYS.between(date1, date2)`方法,它返回两个日期之间的全时间段以天为单位。 4. **异常处理**:在处理用户输入时,需要考虑异常...

    【强2】30个java工具类

    [工具类] Java中计算任意两个日期之间的工作天数 .java.txt [工具类] java抓取网页 .java.txt [工具类] MD5 .java.txt [工具类] MD5强化版 .java.txt [工具类] MD5超强化版 .java.txt [工具类] XML 实用工具类 .java...

    根据输入月份获取季度区间

    例如,如果起始月份是1月,则加上两个月以获得该季度的最后一个月(即3月)。 - 类似地,对于结束月份,同样通过调整月份值来确定其所在的季度。 #### 4. **结果列表构建** - 创建一个`List`来存储最终的季度日期...

    java日期使用工作总结

    - **计算两个日期之间的天数**: ```java SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); java.util.Date date = myFormatter.parse("2003-05-1"); java.util.Date mydate = myFormatter....

    JAVA日期时间的计算.pdf

    在这个例子中,我们使用了`SimpleDateFormat`来解析字符串表示的日期,并计算两个日期之间的天数差。 ### java.util.Calendar类 `java.util.Calendar`是一个抽象类,提供了日期时间操作的一些方法。它是一个更复杂...

    java小程序实现日历的计算

    最后,计算两个日期相差的天数,可以通过直接相减`Calendar`对象或者使用`java.time`包中的`ChronoUnit.DAYS.between()`方法。前者需要先将两个`Calendar`对象设置到同一时区,然后比较它们的`time`字段;后者则是...

    JAVA获取目前时间 .doc

    在提供的代码中,可以看到一个简单的示例,展示了如何利用`java.util`和`java.text`包中的类来获取并格式化当前日期和时间,以及计算两个日期之间的差值。以下是对这些知识点的详细说明: 1. **`java.util.Date`类*...

Global site tag (gtag.js) - Google Analytics