我需要两个给定日期之间的所有月份/年份名称。我只需要将其放在java上。
示例:
Input Date:
date 1- 20/12/2011
date 2- 22/08/2012
Now ,my expected result should be :-
Dec/2011
Jan/2012
Feb/2012
Mar/2012
Apr/2012
May/2012
Jun/2012
Jul/2012
Aug/2012
有人能帮助我吗?在此先感谢。
答案 0 :(得分:10)
您可以简单地使用the Calendar class并通过在每次迭代using myCalendar.add(Calendar.MONTH, 1);
添加一个月来从一个日期迭代到另一个日期。
Calendar类负责避免溢出并为您更新其他字段(此处为年份)。
答案 1 :(得分:10)
使用Joda-Time(因为未指定,我假设你至少可以看看joda时间是什么):
LocalDate date1 = new LocalDate("2011-12-12");
LocalDate date2 = new LocalDate("2012-11-11");
while(date1.isBefore(date2)){
System.out.println(date1.toString("MMM/yyyy"));
date1 = date1.plus(Period.months(1));
}
答案 2 :(得分:4)
上面的每个对话。使用日历和添加方法。
我没有测试过这个,但它就是在那里:
public static List<Date> datesBetween(Date d1, Date d2) {
List<Date> ret = new ArrayList<Date>();
Calendar c = Calendar.getInstance();
c.setTime(d1);
while (c.getTimeInMillis()<d2.getTime()) {
c.add(Calendar.MONTH, 1);
ret.add(c.getTime());
}
return ret;
}
答案 3 :(得分:4)
虽然其他答案在撰写时都是很好的答案,但它们现在已经过时了。自Java 8引入YearMonth
类以来,此任务已大大简化:
String date1 = "20/12/2011";
String date2 = "22/08/2012";
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu", Locale.ROOT);
DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMM/uuuu", Locale.ROOT);
YearMonth endMonth = YearMonth.parse(date2, dateFormatter);
for (YearMonth month = YearMonth.parse(date1, dateFormatter);
! month.isAfter(endMonth);
month = month.plusMonths(1)) {
System.out.println(month.format(monthFormatter));
}
打印:
Dec/2011
Jan/2012
Feb/2012
Mar/2012
Apr/2012
May/2012
Jun/2012
Jul/2012
Aug/2012
请为第二次拨打DateTimeFormatter.ofPattern()
提供适当的区域设置,以获取您所用语言的月份名称。第一次打电话也是安全的。
答案 4 :(得分:1)
这样做
Calendar cal = Calendar.getInstance();
cal.setTime(your_date_object);
cal.add(Calendar.MONTH, 1);
答案 5 :(得分:0)
假设你有这两个约会。你可以通过迭代while循环直到fromDate之前的toDate来轻松比较它。
Date fromDate= new Date("1/4/2016");
Date toDate = new Date("31/12/2016");
int i=0;
while(fromDate.before(toDate)){
i=i+1;
fromDate.setMonth(i);
System.out.println(fromDate);
}
您可以在列表中添加日期或做任何想要做的事情!!!
答案 6 :(得分:0)
现代方法使用 java.time 类。切勿使用Date
/ Calendar
/ SimpleDateFormat
等。
LocalDate
LocalDate
类表示仅日期的值,没有日期和时区。
LocalDate startLocalDate = LocalDate.of( 2011 , Month.DECEMBER , 20 ) ;
LocalDate stopLocalDate = LocalDate.of( 2012 , Month.AUGUST , 2 ) ;
YearMonth
仅对年份和月份感兴趣时,请使用类YearMonth
。
YearMonth start = YearMonth.from( startLocalDate) ;
YearMonth stop = YearMonth.from( stopLocalDate ) ;
循环。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM/uuuu" , Locale.US ) ;
int initialCapacity = start.until( stop , ChronoUnit.MONTHS ) ;
List< YearMonth > yearMonths = new ArrayList<>( initialCapacity ) ;
YearMonth ym = start ;
while ( ym.isBefore( stop ) ) {
System.out.println( ym.format( f ) ) ; // Output your desired text.
yearMonths.add( ym ) ;
ym = ym.plusMonths( 1 ) ; // Increment to set up next loop.
}
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。