Java中日期的加法和减法

我们如何在java中添加或减去日期? 例如java.sql.Date并且格式如下: yyyy-MM-dd ,我怎么能从中添加5个月? 我在一些教程中看到他们正在使用Calendar ,我们可以在它上面设置日期吗? 请帮忙。

示例: 2012-01-01添加5个月后将成为2012-06-01

PS:我是一名.Net程序员,慢慢学习Java环境。

首先,您必须将String日期转换为java.util.Date ,而不是必须使用java.util.Calendar来操作日期。 也可以用millis做数学,但我不建议这样做。

 public static void main( final String[] args ) throws ParseException { final String sdate = "2012-01-01"; final SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd" ); final Date date = df.parse( sdate ); // conversion from String final java.util.Calendar cal = GregorianCalendar.getInstance(); cal.setTime( date ); cal.add( GregorianCalendar.MONTH, 5 ); // date manipulation System.out.println( "result: " + df.format( cal.getTime() ) ); // conversion to String } 

远离日期数学的内置Date类。 看看JodaTime,它有更好的API用于此类事情。

使用Calendar

 Calendar cal = Calendar.getInstance(); cal.add(Calendar.MONTH, 5); 

要将日期转换为日历,请使用:

 Date date = your_date_here; Calendar cal = Calendar.getInstance(); cal.setTime(date); 

然后使用日历算术函数进行加/减:

 cal.add(Calendar.MONTH, 5); 

或者,以milis为单位转换日期。 算一算,将millis转换回日期。

使用谷歌的GWT包中的CalenderUtils

 import com.google.gwt.user.datepicker.client.CalendarUtil; 

 //now Date d = new Date(); // Now + 2 months CalendarUtil.addMonthsToDate(d, 2); 

另一个选项是来自第三方Apache Commons库集合的DateUtils类。 例:

 Date d = DateUtils.parseDate("2012-01-01", "yyyy-MM-dd"); Date d2 = DateUtils.addMonths(d, 5); System.out.println("Old date + 5 months = " + d2); 

添加日期的完整程序位于http://dwbitechguru.blogspot.ca/2014/09/jave-program-to-add-or-substract-dates.html