`
guojianpeng9806
  • 浏览: 30399 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中类Calendar的roll和add的区别

    博客分类:
  • Java
阅读更多
问题产生:在做电信项目时,常常需要根据账期查询详单、话单等功能,就是这个账期,让我遇到了一个棘手的问题,当跨年时,账期的日期出现了问题。比如现在日期是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方法才得到我们想要的月份。
分享到:
评论
2 楼 guojianpeng9806 2010-02-05  
javaz 写道
呵呵,LZ!
你这是刚工作的时候遇到的问题吧?

也不是啊,问题就是随时发现,随时解决吗,也许这就是经验吧
1 楼 javaz 2010-02-04  
呵呵,LZ!
你这是刚工作的时候遇到的问题吧?

相关推荐

    java中Calendar类用法实例详解

    Java 中的 Calendar 类是一个非常重要的类,它提供了许多有用的方法和字段来处理日期和时间相关的操作。下面我们将详细介绍 Java 中 Calendar 类的用法实例。 首先,Calendar 类提供了许多常量字段,例如 DATE、DAY...

    java API 在包java.util中有一个GregorianCalendar类,使用它可以得到一年内某个月的日历.zip

    Java API中的`java.util.GregorianCalendar`类是用于处理日期和时间的重要工具,它提供了丰富的功能来满足各种日历操作需求。这个类是基于格里高利历(公历)的,是Java中最常用的日期时间类之一。在给定的压缩包...

    java源码:Calendar万年历.zip

    这个程序主要基于Java的`Calendar`类,这是一个强大的日期和时间处理工具类,它提供了丰富的功能来处理日期、时间以及时间间隔。`Calendar`类是抽象类,实际使用时通常会通过`getInstance()`方法获取其子类`...

    基于Java的Calendar万年历.zip

    在Java编程语言中,`Calendar`类是用于处理日期和时间的核心类之一。这个`基于Java的Calendar万年历.zip`文件很可能包含了一个示例项目,演示如何利用`Calendar`类构建一个显示从公元前到公元后数千年日期的万年历。...

    日期类的加减及java中所以日期类的操作算法大全

    `Calendar`类是Java中处理日期和时间的核心类之一,它提供了一系列的方法来获取和设置日期、时间的各种组件,如年、月、日、小时、分钟、秒等。例如,创建一个`Calendar`实例并设置特定的年份: ```java Calendar ...

    java中时间操作函数

    在 Java 中,`Calendar` 和 `Date` 是两个不同的时间类型。`Calendar` 是一个抽象类,提供了对日期和时间的操作,而 `Date` 是一个具体的时间类型,表示一个特定的日期和时间。 (1) Calendar 转化为 Date 可以使用...

    Java实现按年月打印日历功能【基于Calendar】

    Calendar类是Java语言中一个用于日期和时间处理的类,它提供了许多有用的方法和字段来操作日期和时间。Calendar类可以用来获取当前日期和时间,设置日期和时间,计算日期和时间之间的差异等。 日期运算 日期运算是...

    java中的循环日期.docx

    在 Java 中,add() 和 roll() 方法是 Calendar 类的两个重要方法。add() 方法用于将指定的日历字段增加或减少指定的值,而 roll() 方法用于将指定的日历字段增加或减少指定的值,但不会改变其他日历字段的值。 ```...

    Java Calendar类的详解及使用实例

    Calendar类是Java中非常重要的日期处理类,它提供了对日期的操作和处理的功能,能够满足我们在实际项目中的日期处理需求。 知识点: * Calendar类的声明和继承关系 * getInstance方法的实现和用法 * Calendar类的...

    Java Calendar日历类原理及使用方法

    Java Calendar日历类是Java语言中的一种日历类,用于处理日期和时间相关的操作。该类提供了许多有用的方法来获取和设置日期和时间的信息。 日历类原理 Java Calendar日历类是抽象类,无法直接创建对象使用,需要...

    java日历各种写法

    `Calendar`类还提供了诸如获取周几(`get(Calendar.DAY_OF_WEEK)`)、获取一年中的第几天(`get(Calendar.DAY_OF_YEAR)`)等功能,以及调整日期(`roll()`方法)和判断闰年(`isLeapYear()`方法)等。 总之,Java的...

    Java-Date 类的学习总结.docx

    Java 中有两个日期类:Calendar 和 Date。可以使用以下方法将 Calendar 对象转化为 Date 对象: ```java Calendar cal = Calendar.getInstance(); Date date = cal.getTime(); ``` 也可以将 Date 对象转化为 ...

    java中的循环日期.pdf

    在 Java 中,add() 和 roll() 两个方法都是用于修改 Calendar 对象的日期和时间的。add() 方法是将指定的时间量添加到 Calendar 对象上,而 roll() 方法是将指定的时间量滚动到 Calendar 对象上。代码示例如下: ```...

    Java Calendar类的使用总结实例

    Java Calendar类是Java中用于处理日期和时间的类,它提供了许多实用的方法来操作日期和时间。在实际项目中,我们经常会涉及到对时间的处理,例如登陆网站,我们会看到网站首页显示当前日期和时间,某些网站会记录下...

    java 日期算法

    日期类有两个主要的实现类:`java.util.Date` 和 `java.util.Calendar`。其中,`Date` 类代表着一个特定的瞬间,通常用来表示当前时间,而 `Calendar` 类则是一个抽象类,提供了更多的方法来操作日期和时间。 日期...

    【Java精品】Java中Date各种相关用法.doc

    在Java中,Date类通常与Calendar类一起使用,因为Date类本身并不支持设置和获取具体的时间字段(如年、月、日等),而Calendar类提供了这样的功能。 1. 计算某一月份的最大天数 使用Calendar类的getActualMaximum...

    Java Calendar类的时间操作

    在Java编程语言中,`Calendar`类是用于管理和操作日期和时间的核心类之一。这个类提供了丰富的功能,包括但不限于创建日历、获取和设置日期时间、进行日期时间的加减操作以及比较日期等。`Calendar`类是抽象类,通常...

    日历calendar详细代码

    在Java编程语言中,`Calendar`类是用于处理日期和时间的核心类,它是一个抽象类,提供了各种日期和时间操作的方法。在这个“日历calendar详细代码”中,我们很可能会看到如何使用`Calendar`类来创建、修改和查询日期...

    java日历练习题

    在Java编程语言中,日历(Calendar)类是处理日期和时间的核心类,它提供了丰富的功能来操作日期。本练习题旨在帮助初学者深入理解Java中的日历API及其使用方法。"简单易懂"的描述意味着我们将以清晰、简洁的方式...

    java时间 java.util.Calendar深入分析

    在Java编程语言中,`java.util.Calendar`是一个重要的类,用于处理日期和时间。它是一个抽象类,提供了处理各种时间单位(如年、月、日、小时等)的方法。由于`Date`类逐渐被淘汰,`Calendar`成为了处理时间的主要...

Global site tag (gtag.js) - Google Analytics