java实现两个日期相减得到中间的年份和月份
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现两个日期相减得到中间的年份和月份相关的知识,希望对你有一定的参考价值。
2014-07-31 - 2013-07-01 相减得到
2013-07
2013-08
2013-09
2013-10
2013-11
2013-12
2014-01
依次类推 求大神
public static void main(String[] args)
String startTime = "2012-07-01";
String endTime = "2014-07-31";
String[] arg1 = startTime.split("-");
String[] arg2 = endTime.split("-");
int year1 = Integer.valueOf(arg1[0]);
int year2 = Integer.valueOf(arg2[0]);
int month1 = Integer.valueOf(arg1[1]);
int month2 = Integer.valueOf(arg2[1]);
for (int i = year1; i <= year2; i++)
int monthCount = 12;
int monthStart = 1;
if (i == year1)
monthStart = month1;
monthCount = 12-monthStart+1;
else if (i == year2)
monthCount = month2;
for(int j = 0; j < monthCount; j++)
int temp = monthStart+j;
if(temp >=10)
System.out.println(i+"-"+(monthStart+j));
else
System.out.println(i+"-0"+(monthStart+j));
2012-07
2012-08
2012-09
2012-10
2012-11
2012-12
2013-01
2013-02
2013-03
2013-04
2013-05
2013-06
2013-07
2013-08
2013-09
2013-10
2013-11
2013-12
2014-01
2014-02
2014-03
2014-04
2014-05
2014-06
2014-07追问
哥们谢啦!
参考技术A 在 Java 中,可以使用 `java.time.LocalDate` 类来表示日期,并使用 `java.time.Period` 类来计算两个日期之间的年份和月份差。以下是一个示例代码:```java
import java.time.LocalDate;
import java.time.Period;
import java.util.ArrayList;
public class DateSubtraction
public static void main(String[] args)
// 定义两个日期
LocalDate date1 = LocalDate.of(2013, 7, 1);
LocalDate date2 = LocalDate.of(2014, 7, 31);
// 计算两个日期之间的差距
Period period = Period.between(date1, date2);
// 输出年份和月份差
System.out.println("Years: " + period.getYears() + ", Months: " + period.getMonths());
// 按月份拆分日期并输出
ArrayList<LocalDate> dates = new ArrayList<>();
LocalDate current = date1;
while (current.isBefore(date2) || current.equals(date2))
dates.add(current);
current = current.plusMonths(1);
for (int i = 0; i < dates.size() - 1; i++)
System.out.println(dates.get(i) + " - " + dates.get(i + 1));
```
运行上述代码会输出以下结果:
```
Years: 1, Months: 0
2013-07-01 - 2013-08-01
2013-08-01 - 2013-09-01
2013-09-01 - 2013-10-01
2013-10-01 - 2013-11-01
2013-11-01 - 2013-12-01
2013-12-01 - 2014-01-01
2014-01-01 - 2014-02-01
2014-02-01 - 2014-03-01
2014-03-01 - 2014-04-01
2014-04-01 - 2014-05-01
2014-05-01 - 2014-06-01
2014-06-01 - 2014-07-01
```
其中,第一行输出了年份和月份差,即 1 年 0 个月;接着,程序按照每个月的开始时间和结束时间拆分日期,并逐个输出相邻两个时间段。通过这些输出,我们可以看到从 2013 年 7 月到 2014 年 7 月之间,一共经历了 1 年 0 个月,并分别列出了每个月的时间范围。 参考技术B SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar ca=Calendar.getInstance();
ca.setTime(sdf.parse("2014-01-01"));
Calendar ca1=Calendar.getInstance();
ca1.setTime(sdf.parse("2014-08-01"));
int y=ca.get(ca.YEAR);
int y1=ca1.get(ca1.YEAR);
int mon=ca.get(ca.MONTH);
int mon1=ca1.get(ca1.MONTH);
int depart=Math.abs(y-y1)*12+Math.abs(mon-mon1);//相差的总月份
for(int i=0;i<depart;i++)
ca.add(ca.MONTH, 1);
System.out.println(sdf.format(ca.getTime()));
参考技术C import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class MonthTest
public static void main(String[] args) throws ParseException
String d1 = "2012-01-12";
String d2 = "2010-02-11";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(d1));
int year1 = c.get(Calendar.YEAR);
int month1 = c.get(Calendar.MONTH);
c.setTime(sdf.parse(d2));
int year2 = c.get(Calendar.YEAR);
int month2 = c.get(Calendar.MONTH);
int result;
if(year1 == year2)
result = month1 - month2;
else
result = 12*(year1 - year2) + month1 - month2;
System.out.println(result);
追问
哥 你这个没对啊 打印结果是23
参考技术D 没有编译环境,提供一下思路:SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
Calendar calendar = Calendar.getInstance();//日历对象
calendar.setTime(date1);//设置起始日期
while(calendar.getTime() <= date2)
System.out.println(sdf.format(calendar.getTime()));
calendar.add(Calendar.MONTH, 1);//月份加一
java日期相减得到天数
public class Dat static SimpleDateFormat h; public static void Test(Date date, int m) h = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String n = h.format(date); String myString = DateFormat.getDateInstance().format(date); System.out.println("格式化后:" + myString); Timestamp time = Timestamp.valueOf(n); // 在天数上加(减)天数 long l = time.getTime() + 24 * 60 * 60 * m * 1000; time.setTime(l); System.out.println("计算后的日期:" + time); public static void main(String arg[]) Date date=new Date(108,04,02); Test(date,5); 这个是加上天数的,怎么实现相减?有点问题
参考技术A import java.text.DateFormat;import java.text.SimpleDateFormat;
import java.util.*;
public class Dat
private static SimpleDateFormat h;
private static Map<String ,Integer> map = new HashMap<String, Integer>();
static
map.put("date", Calendar.DATE);
map.put("month", Calendar.MONTH);
map.put("year", Calendar.YEAR);
map.put("hour", Calendar.HOUR);
map.put("minute", Calendar.MINUTE);
map.put("second", Calendar.SECOND);
map.put("millisecond", Calendar.MILLISECOND);
map.put("天", Calendar.DATE);
map.put("月", Calendar.MONTH);
map.put("年", Calendar.YEAR);
map.put("时", Calendar.HOUR);
map.put("分", Calendar.MINUTE);
map.put("秒", Calendar.SECOND);
map.put("毫", Calendar.MILLISECOND);
public static void Test(Date date,String type, int number)
Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.add(map.get(type), number);
Date newDate = cal.getTime();
System.out.println(DateFormat.getDateTimeInstance().format(newDate) + " " + date.getTime()%1000);
public static void main(String arg[])
//过时方法请不要使用
Date date=new Date();
Test(date,"date",5);
Test(date,"分",5);
Test(date,"minute",-5);
以上是关于java实现两个日期相减得到中间的年份和月份的主要内容,如果未能解决你的问题,请参考以下文章