Java日历添加问题
我对Java Calendar add()功能有问题。“给予”或“接受”用于为在旅游地点出发的日期提供一个迂回日期Java日历添加问题,java,calendar,Java,Calendar,我对Java Calendar add()功能有问题。“给予”或“接受”用于为在旅游地点出发的日期提供一个迂回日期 end.add(Calendar.DATE, Integer.parseInt(giveOrTake)); 代码在上面,我使用的测试条件是选择2012年7月29日作为日期和3天的取舍。根据文件规定,该文件应于2012年8月1日发布,但于2012年7月1日发布 我已经检查了giveOrTake,当它被传递到方法时,它很好,所以我不知道发生了什么。我可以硬编码giveOrTake值,
end.add(Calendar.DATE, Integer.parseInt(giveOrTake));
代码在上面,我使用的测试条件是选择2012年7月29日作为日期和3天的取舍。根据文件规定,该文件应于2012年8月1日发布,但于2012年7月1日发布
我已经检查了giveOrTake,当它被传递到方法时,它很好,所以我不知道发生了什么。我可以硬编码giveOrTake值,但仍然会得到错误。对我有用:
import java.util.*;
public class Test {
public static void main (String []args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2012, Calendar.JULY, 29);
calendar.add(Calendar.DATE, 3);
System.out.println(calendar.getTime()); // August 1st
}
}
我的猜测是,在调用add
之前,您的月份搞错了-请注意我对上面的set
的调用是如何使用6作为月份的,因为该调用使用的是基于0的月份号
请注意,根据我对这个问题的评论,如果可以的话,您最好转到…这是日期格式的问题。当它应该是“yyyyymmdd”时,它被设置为
yyyymmdd
。您使用的是麻烦的旧日期时间类,现在是遗留的,被java.time类取代
此外,您正在使用日期时间对象来表示仅限日期的值,即不匹配值
使用java.time
该类表示一个仅限日期的值,不包含一天中的时间和时区
LocalDate ld = LocalDate.of( 2012 , 7 , 29 ) ;
LocalDate threeDaysLater = ld.plusDays( 3 );
ld.toString():2012-07-29
三天一次。toString():2012-08-01
看
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 从哪里获得java.time类
- 后来
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门为Android采用了ThreeTen Backport(如上所述)
- 看
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如、、和。请发布一个简短但完整的程序来演示这个问题。(哦,理想的情况是改为Joda Time——这更合理。)您是如何生成输出的?(在爪哇日历中,八月是第7个月……)对于忽略了这个问题,我深表歉意。事实证明,SimpleDataFormat使用“mm”而不是“mm”是一个问题。基于零的月份是相当误导的imo@keuleJ:当然。这只是使用Joda的众多原因之一。@jonsket您可以使用
Calendar.JUNE
etc常量来避免基于0的问题。@DandreAllison:这只在编译时知道月份号的非常特殊的情况下才有帮助。例如,当您从另一个系统将它作为一个整数变量时,它没有任何帮助。@DandreAllison:是的,这是一个API缺陷。我不认为每个在现实生活中处理公历的人都会将月份数字与那些月份联系在一起的月份数字真的是一个“神奇的数字”。我完全同意这是一个API问题,而不是实现问题。这就是当你在这个问题上没有提供足够的信息时会发生的情况。任何人都不可能仅仅根据这些信息来帮助你——然而,如果你提供了一个实际演示问题的程序,那么它就会很快被发现。