Java 添加月份的日历问题+;Android中的1到日历月
我正在使用以下代码Java 添加月份的日历问题+;Android中的1到日历月,java,android,date,Java,Android,Date,我正在使用以下代码 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添加到
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将给mar一个月。如果我们在当前日期加上30天,可能会返回正确的输出。但是我想展示二月。谁能帮帮我吗
cal.set(Calendar.MONTH, cal.get( Calendar.MONTH ) + 1 );
它之所以显示3月3日,是因为它明显增加了30天,即2月31日,而2月31日并不存在,所以它会转到3月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 */ );
}
您可以看到+1 to set字段正在添加与您的日期不同的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
您必须使用add()
like
cal.add(Calendar.MONTH, 1);
输出->
Before Thu Jan 31 10:15:04 IST 2013
After Thu Feb 28 10:15:04 IST 2013
这种日期-时间工作更容易使用:
- 2.3图书馆
- java捆绑的java.util.Date和.Calendar类的流行替代品
- 开源
- 免费
- 积极维护(截至2014-02年)
-
- 新进
- 灵感来源于Joda Time,但经过重新设计
- 定义为
- 可用
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
蒙塔戈:2014-01-24T01:53:22.386+01:00
蒙太古一天的开始时间:2014-01-24T00:00:00.000+01:00
月后:2014-03-24T01:53:22.386+01:00
这也会产生同样的效果0+1=1
,这是OP已经传递给set()
的内容。Calendar.add(Calendar.MONTH,1)没有添加30天,它只添加了1个月<代码>日历cal=Calendar.getInstance();DateFormat df=新的SimpleDataFormat(“dd MMM yyy”);校准设定时间(df.parse(“2015年2月20日”);System.out.println(“Before”+cal.getTime())//2015年2月20日(星期五)00:00:00 EET之前的加算(日历月,1);System.out.println(“在”+cal.getTime()之后)//2015年3月20日星期五00:00:00 EET之后我正在使用JDK 7,这不是30天。它可以是29、30或31。
System.out.println( "dateTime: " + dateTime );
System.out.println( "monthAgo: " + monthAgo );
System.out.println( "monthAgo start of day: " + monthAgo.withTimeAtStartOfDay() );
System.out.println( "monthLater: " + monthLater );