在JAVA中如何算出两段时间相差的月数 ,

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JAVA中如何算出两段时间相差的月数 ,相关的知识,希望对你有一定的参考价值。

在JAVA中如何算出两段时间之间相差的月数 ,
比如2009-12-10到2010-5-10之间相差多少个月 怎么搞 啊 ??急!急!急!

/** * 计算两个日期之间相差的月数 * * @param date1 * @param date2 * @return */ public static int getMonths(Date date1, Date date2) int iMonth = 0; int flag = 0; try Calendar objCalen
/**
* 计算两个日期之间相差的月数
*
* @param date1
* @param date2
* @return
*/
public static int getMonths(Date date1, Date date2)
int iMonth = 0;
int flag = 0;
try
Calendar objCalendarDate1 = Calendar.getInstance();
objCalendarDate1.setTime(date1);

Calendar objCalendarDate2 = Calendar.getInstance();
objCalendarDate2.setTime(date2);

if (objCalendarDate2.equals(objCalendarDate1))
return 0;
if (objCalendarDate1.after(objCalendarDate2))
Calendar temp = objCalendarDate1;
objCalendarDate1 = objCalendarDate2;
objCalendarDate2 = temp;

if (objCalendarDate2.get(Calendar.DAY_OF_MONTH) < objCalendarDate1
.get(Calendar.DAY_OF_MONTH))
flag = 1;

if (objCalendarDate2.get(Calendar.YEAR) > objCalendarDate1
.get(Calendar.YEAR))
iMonth = ((objCalendarDate2.get(Calendar.YEAR) - objCalendarDate1
.get(Calendar.YEAR))
* 12 + objCalendarDate2.get(Calendar.MONTH) - flag)
- objCalendarDate1.get(Calendar.MONTH);
else
iMonth = objCalendarDate2.get(Calendar.MONTH)
- objCalendarDate1.get(Calendar.MONTH) - flag;

catch (Exception e)
e.printStackTrace();

return iMonth;
参考技术A 用字符串截取两个时间的月份再相减
int first=time1.indexOf("-");
int last=time1.lastIndexOf("-");
int month1=time1.subString(first+1,last);//第一个时间的月份,第二个如上,再相减。
参考技术B public static int calculateMonthIn(Date date1, Date date2)
Calendar cal1 = new GregorianCalendar();
cal1.setTime(date1);
Calendar cal2 = new GregorianCalendar();
cal2.setTime(date2);
int c =
(cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR)) * 12 + cal1.get(Calendar.MONTH)
- cal2.get(Calendar.MONTH);
return c;
本回答被提问者采纳
参考技术C 翻翻api,肯定有这么个方法,不用自个写的

在JAVA中获取日期和今天之间的月数[重复]

【中文标题】在JAVA中获取日期和今天之间的月数[重复]【英文标题】:Get the number of months beetween a date and today in JAVA [duplicate] 【发布时间】:2020-07-14 02:16:56 【问题描述】:

我正在尝试获取作为参数发送的字符串格式(“2019-05-31”)的给定日期与今天:2020-07-13 之间的月数。在本例中为 13 个月。

我想把答案放在一个 int 变量中。

有什么简单的方法吗?

非常感谢!

【问题讨论】:

@Niroshan 可怕的 Date 类都在几年前被现代的 java.time 类所取代,几年前采用了 JSR 310。建议在 2020 年使用它们是糟糕的建议。 这个好像没研究好?有一些类似的问题,例如Java Date month difference。 This answer by Kuchi wold 可能会有所帮助。 【参考方案1】:

从 Java 1.8 开始:

LocalDate today = LocalDate.now();
LocalDate myDate = LocalDate.parse("2019-05-31");
int months = (int) Period.between(myDate,today).toTotalMonths();
System.out.println(months); // output: 13

【讨论】:

哇,非常感谢...不知道这么简单:D 虽然结果不太可能不适合int,但我发现最好检查一下假设。使用Math.toIntExact(Period.between(myDate,today).toTotalMonths())【参考方案2】:

java.time

使用 java.time 类。

Period::toTotalMonths 方法返回一个 long,表示整个时间跨度内经过的月数。

您要求的是int,而不是long。与其将long 转换为您想要的int,不如调用Math.toIntExact。如果转换产生的缩小溢出,此方法将引发异常。

int months =
    Math.toIntExact(
        Period.between
        (
            LocalDate.parse( "2019-05-31" ) ,
            LocalDate.now( ZoneId.of( "Africa/Tunis" ) )
        )
        .toTotalMonths()
    )
;

【讨论】:

【参考方案3】:

您可以使用以下方法

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

public class DateUtil

    public static void main(String[] args) 

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String date = "2019-05-31";
        LocalDate localDate = LocalDate.parse(date, formatter);
        LocalDate now = LocalDate.now();

        long diff = ChronoUnit.MONTHS.between(localDate, now);

        System.out.println(diff);

    


【讨论】:

无需为标准 ISO 8601 格式定义自定义格式模式。内置。

以上是关于在JAVA中如何算出两段时间相差的月数 ,的主要内容,如果未能解决你的问题,请参考以下文章

Java计算两个日期时间相差几天,几小时,几分钟等

Java计算两个日期时间相差几天,几小时,几分钟等

在JAVA中获取日期和今天之间的月数[重复]

SQL是计算两个日期相差多少天数的函数?

如何用excel计算两个日期之间相差的年数和月数

如何用EXCEL计算两个日期之间相差的年数和月数?