问题产生:在做电信项目时,常常需要根据账期查询详单、话单等功能,就是这个账期,让我遇到了一个棘手的问题,当跨年时,账期的日期出现了问题。比如现在日期是2002/1/12,查询账单时,最新账期日期应为2001/12/1-2001/12/31,但是我们输出到前台的账期却成了2002/12/1-2002/12/31,这整整差了一年啊,不知道用户看了是何感想,经过查看代码,最后发现,原来是Calendar的roll方法惹的祸。
问题解决:原来的代码在处理跨年的情况时,使用roll方法向后退一个月,也就是把1月退到12月,但是谁知道roll方法只把月往后退了,年份却没有变,这就出现了上述的问题,其实这里使用roll方法是错误的,正确应该使用add方法将月份往后退1。
代码演示:
使用roll方法将月份减一
package test;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class CalendarTest {
private static final SimpleDateFormat sdf_bed = new SimpleDateFormat("yyyy/MM/dd");
public static void main(String[] args){
Calendar cal = Calendar.getInstance();
cal.set(2002,Calendar.JANUARY,12);
System.out.println("当前日期:"+sdf_bed.format(cal.getTime()));
cal.roll(Calendar.MONTH,-1);
// cal.add(Calendar.MONTH,-1);
System.out.println("生成账期日期:"+sdf_bed.format(cal.getTime()));
}
}
输出结果:
当前日期:2002/01/12
生成账期日期:2002/12/12
使用add方法将月份减一
package test;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class CalendarTest {
private static final SimpleDateFormat sdf_bed = new SimpleDateFormat("yyyy/MM/dd");
public static void main(String[] args){
Calendar cal = Calendar.getInstance();
cal.set(2002,Calendar.JANUARY,12);
System.out.println("当前日期:"+sdf_bed.format(cal.getTime()));
// cal.roll(Calendar.MONTH,-1);
cal.add(Calendar.MONTH,-1);
System.out.println("生成账期日期:"+sdf_bed.format(cal.getTime()));
}
}
输出结果:
当前日期:2002/01/12
生成账期日期:2001/12/12
显而易见,使用add方法才得到我们想要的月份。
分享到:
相关推荐
Java SE程序 Calendar类Java SE程序 Calendar类Java SE程序 Calendar类Java SE程序 Calendar类Java SE程序 Calendar类Java SE程序 Calendar类Java SE程序 Calendar类Java SE程序 Calendar类Java SE程序 Calendar类...
java中时间类Date和Calendar的使用 java中时间类Date和Calendar的使用 <PRE class=java name="code">package cn.com; import java.text.DateFormat; import java.text.ParseException; import java.text....
Java 之 Date 和 Calendar 实例
Java中Calendar类.pdf 学习资料 复习资料 教学资源
LunarCalendar返回农历(阴历)日期的JAR包 根据指定日期计算对应农历日期(这个计算方法是网上找的,最初的作者是谁已经无法考证了,感谢网络资源吧!),本人封装成好用的JAR包后发不出来,供大家免费下载! ...
java中Calendar类制作日历
一看就知道是和日期有关的类了,这个类最主要的作用就是获得当 前时间了,然而这个类里面也具有设置时间以及一些其他的功能,可是由于本身设计的问题,这些方法却遭到众多批评,而这些遭受批评的功能都已移植到另外...
Calendar 和 Date 类 是JAVA很重要的两个类,学好它们对于JAVA学习的道路非常重要
主要介绍了java中Calendar类用法,结合实例形式较为详细的分析了Calendar类的函数、方法功能与相关使用技巧,需要的朋友可以参考下
A practical Java calendar source
那现在最为普及和通用的日历就是 \"Gregorian Calendar\"。也就是我们在讲述年份时常用 \"公元几几年\"。Calendar 抽象类定义了足够的方法,让我们能够表述日历的规则。Java 本身提供了对 \"Gregorian Calendar\" ...
java 中Calendar日期格式的转换
Java中用Calendar类计算周和周的起始日期
关于java中date和Calendar日期处理小结,包含一些常用方法等
本Java精华内容深入Java API、嵌套类和内部类、与时间有关的类Date,DateFormat,Calendar、文件与流、Java变量类型间的相互转换、Java与Web、用连接池提高Servlet访问数据库的效率、Java扩展、应用服务器的集群策略及...
java日历控件Calendar 多种类型 java日历控件Calendar 多种类型 最强的日历控件一定要去看看 http://www.my97.net/dp/index.asp
Java 之 Date 和 CalendarJava 之 Date 和 Calendar
主要为大家详细介绍了Java中Date和Calendar常用用法,感兴趣的小伙伴们可以参考一下
JAVA的Date类与Calendar类.docx
如何用java编写万年历:用calendar类里面的方法,不用判断年份是闰年还是平年,也不需要判断一个月是30天还是31天,Calendar里的方法自动实现了这一点。