问题产生:在做电信项目时,常常需要根据账期查询详单、话单等功能,就是这个账期,让我遇到了一个棘手的问题,当跨年时,账期的日期出现了问题。比如现在日期是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 中的 Calendar 类是一个非常重要的类,它提供了许多有用的方法和字段来处理日期和时间相关的操作。下面我们将详细介绍 Java 中 Calendar 类的用法实例。 首先,Calendar 类提供了许多常量字段,例如 DATE、DAY...
Java API中的`java.util.GregorianCalendar`类是用于处理日期和时间的重要工具,它提供了丰富的功能来满足各种日历操作需求。这个类是基于格里高利历(公历)的,是Java中最常用的日期时间类之一。在给定的压缩包...
这个程序主要基于Java的`Calendar`类,这是一个强大的日期和时间处理工具类,它提供了丰富的功能来处理日期、时间以及时间间隔。`Calendar`类是抽象类,实际使用时通常会通过`getInstance()`方法获取其子类`...
在Java编程语言中,`Calendar`类是用于处理日期和时间的核心类之一。这个`基于Java的Calendar万年历.zip`文件很可能包含了一个示例项目,演示如何利用`Calendar`类构建一个显示从公元前到公元后数千年日期的万年历。...
`Calendar`类是Java中处理日期和时间的核心类之一,它提供了一系列的方法来获取和设置日期、时间的各种组件,如年、月、日、小时、分钟、秒等。例如,创建一个`Calendar`实例并设置特定的年份: ```java Calendar ...
在 Java 中,`Calendar` 和 `Date` 是两个不同的时间类型。`Calendar` 是一个抽象类,提供了对日期和时间的操作,而 `Date` 是一个具体的时间类型,表示一个特定的日期和时间。 (1) Calendar 转化为 Date 可以使用...
Calendar类是Java语言中一个用于日期和时间处理的类,它提供了许多有用的方法和字段来操作日期和时间。Calendar类可以用来获取当前日期和时间,设置日期和时间,计算日期和时间之间的差异等。 日期运算 日期运算是...
在 Java 中,add() 和 roll() 方法是 Calendar 类的两个重要方法。add() 方法用于将指定的日历字段增加或减少指定的值,而 roll() 方法用于将指定的日历字段增加或减少指定的值,但不会改变其他日历字段的值。 ```...
Calendar类是Java中非常重要的日期处理类,它提供了对日期的操作和处理的功能,能够满足我们在实际项目中的日期处理需求。 知识点: * Calendar类的声明和继承关系 * getInstance方法的实现和用法 * Calendar类的...
Java Calendar日历类是Java语言中的一种日历类,用于处理日期和时间相关的操作。该类提供了许多有用的方法来获取和设置日期和时间的信息。 日历类原理 Java Calendar日历类是抽象类,无法直接创建对象使用,需要...
`Calendar`类还提供了诸如获取周几(`get(Calendar.DAY_OF_WEEK)`)、获取一年中的第几天(`get(Calendar.DAY_OF_YEAR)`)等功能,以及调整日期(`roll()`方法)和判断闰年(`isLeapYear()`方法)等。 总之,Java的...
Java 中有两个日期类:Calendar 和 Date。可以使用以下方法将 Calendar 对象转化为 Date 对象: ```java Calendar cal = Calendar.getInstance(); Date date = cal.getTime(); ``` 也可以将 Date 对象转化为 ...
在 Java 中,add() 和 roll() 两个方法都是用于修改 Calendar 对象的日期和时间的。add() 方法是将指定的时间量添加到 Calendar 对象上,而 roll() 方法是将指定的时间量滚动到 Calendar 对象上。代码示例如下: ```...
Java Calendar类是Java中用于处理日期和时间的类,它提供了许多实用的方法来操作日期和时间。在实际项目中,我们经常会涉及到对时间的处理,例如登陆网站,我们会看到网站首页显示当前日期和时间,某些网站会记录下...
日期类有两个主要的实现类:`java.util.Date` 和 `java.util.Calendar`。其中,`Date` 类代表着一个特定的瞬间,通常用来表示当前时间,而 `Calendar` 类则是一个抽象类,提供了更多的方法来操作日期和时间。 日期...
在Java中,Date类通常与Calendar类一起使用,因为Date类本身并不支持设置和获取具体的时间字段(如年、月、日等),而Calendar类提供了这样的功能。 1. 计算某一月份的最大天数 使用Calendar类的getActualMaximum...
在Java编程语言中,`Calendar`类是用于管理和操作日期和时间的核心类之一。这个类提供了丰富的功能,包括但不限于创建日历、获取和设置日期时间、进行日期时间的加减操作以及比较日期等。`Calendar`类是抽象类,通常...
在Java编程语言中,`Calendar`类是用于处理日期和时间的核心类,它是一个抽象类,提供了各种日期和时间操作的方法。在这个“日历calendar详细代码”中,我们很可能会看到如何使用`Calendar`类来创建、修改和查询日期...
在Java编程语言中,日历(Calendar)类是处理日期和时间的核心类,它提供了丰富的功能来操作日期。本练习题旨在帮助初学者深入理解Java中的日历API及其使用方法。"简单易懂"的描述意味着我们将以清晰、简洁的方式...
在Java编程语言中,`java.util.Calendar`是一个重要的类,用于处理日期和时间。它是一个抽象类,提供了处理各种时间单位(如年、月、日、小时等)的方法。由于`Date`类逐渐被淘汰,`Calendar`成为了处理时间的主要...