我正在使用以下代码
Calendar cal = Calendar.getInstance();
System.out.println("Before "+cal.getTime());
cal.set(Calendar.MONTH, 01);
System.out.println("After "+cal.getTime());
输出
Before Thu Jan 31 10:07:34 IST 2013
After Sun Mar 03 10:07:34 IST 2013
将+1
添加到 jan 的正在提供 3月。如果我们将30天添加到当前日期,可能是它返回正确的输出。但我想展示 feb 月。任何身体都可以帮助我..
答案 0 :(得分:54)
您可以看到+1设置字段添加了30天的日期与您的日期不同(从您的输出中观察到)。
如果你想要几个月,那么使用代码
Calendar cal = Calendar.getInstance();
System.out.println("Before "+cal.getTime()); //Before Thu Jan 31 10:16:23 IST 2013
cal.add(Calendar.MONTH, 1);
System.out.println("After "+cal.getTime()); //After Thu Feb 28 10:16:23 IST 2013
答案 1 :(得分:7)
你必须使用add()
之类的,
cal.add(Calendar.MONTH, 1);
OUTPUT - >
Before Thu Jan 31 10:15:04 IST 2013
After Thu Feb 28 10:15:04 IST 2013
答案 2 :(得分:2)
cal.set(Calendar.MONTH, cal.get( Calendar.MONTH ) + 1 );
无论如何它显示Mar 3
的原因是因为它显然增加了30天,Feb 31st
不存在,所以它转到Mar 3
。
如果你想要下个月的最后一天,你会做这样的事情:
int month = cal.get( Calendar.MONTH );
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + 1);
if( cal.get( month ) > month + 1 ) {
cal.set( Calendar.MONTH, month + 1 );
cal.set( Calendar.DAY, /* here comes your day amount finding algorithm */ );
}
答案 3 :(得分:2)
使用以下任何一种方法都可以更轻松地完成这种日期工作:
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" ); // Or, DateTimeZone.UTC
DateTime dateTime = new DateTime( timeZone );
DateTime monthAgo = dateTime.plusMonths( -1 ); // Smartly handles various month lengths, leap year, and so on.
DateTime monthLater = dateTime.plusMonths( 1 );
转储到控制台...
System.out.println( "dateTime: " + dateTime );
System.out.println( "monthAgo: " + monthAgo );
System.out.println( "monthAgo start of day: " + monthAgo.withTimeAtStartOfDay() );
System.out.println( "monthLater: " + monthLater );
跑步时......
dateTime: 2014-02-24T01:53:22.386+01:00
monthAgo: 2014-01-24T01:53:22.386+01:00
monthAgo start of day: 2014-01-24T00:00:00.000+01:00
monthLater: 2014-03-24T01:53:22.386+01:00