Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加月份的日历问题+;Android中的1到日历月_Java_Android_Date - Fatal编程技术网

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 );