在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 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中如何算出两段时间相差的月数 ,的主要内容,如果未能解决你的问题,请参考以下文章