在编写一个计算季度开始时间和结束时间的代码时,发现有些季度的结束年月不正确,比实际大了一天。
代码如下:
/**
* 得到某一时间所在季度的开始时间
*
* @param cal
* 要判断的时间
* @return
*/
private Calendar getStartCalOfQuarter(Calendar cal) {
int jd = this.getQuarter(cal); // 季度
int startMonth = jd * 3 - 3;// 季度的开始月
int year = cal.get(Calendar.YEAR);
Calendar startCal = Calendar.getInstance();// 季度开始时间
startCal.set(year, startMonth, 1, 0, 0,0);
return startCal;
}
/**
* 得到某一时间所在季度的结束时间
*
* @param cal
* 要判断的时间
* @return
*/
private Calendar getEndCalOfQuarter(Calendar cal) {
Calendar endCal = Calendar.getInstance();// 季度结束时间
Calendar startCal = this.getStartCalOfQuarter(cal);// 得到季度开始日期
System.out.println("开始日期:" + startCal.get(Calendar.YEAR) + "年" + startCal.get(Calendar.MONTH) + "月" + startCal.get(Calendar.DAY_OF_MONTH) + "日"
+ startCal.get(Calendar.HOUR_OF_DAY) + "时" + startCal.get(Calendar.SECOND) + "秒");
{// 结束日期
endCal = startCal;
endCal.add(Calendar.MONTH, 2);
int dayOfEndMonth = endCal.getMaximum
(Calendar.DAY_OF_MONTH);
System.out.println("dateOfEndMonth:"+dayOfEndMonth);
endCal.set(Calendar.DATE, dayOfEndMonth);// 设置季度结束日期的 日子
endCal.set(Calendar.HOUR_OF_DAY, 23); // 设置结束日期的小时
endCal.set(Calendar.SECOND, 59);// 设置结束日期的秒
}
System.out.println("结束日期:" + endCal.get(Calendar.YEAR) + "年" + endCal.get(Calendar.MONTH) + "月" + endCal.get(Calendar.DAY_OF_MONTH) + "日"
+ endCal.get(Calendar.HOUR_OF_DAY) + "时" + endCal.get(Calendar.SECOND) + "秒");
return endCal;
}
后来发现用endCal.getMaximum(Calendar.DAY_OF_MONTH)得到的都是31。
查资料,用getActualMaximum(int)方法才能得到实际最大值。Java API让人看得茫然……(英文不好)
getMinimum 与getActualMinimum方法也是这样。
分享到:
相关推荐
Calendar 类提供了多种方法来获取日期和时间信息,从而使得我们可以轻松地生成万年历。 Calendar 类的基本概念 在 Java 中,Calendar 类是 java.util 包下的一个类,用于代表一个日期和时间对象。Calendar 对象...
`Calendar`类还提供了`getTimeMillis()`方法,它返回当前日期和时间的毫秒值,这对于与Java的`Date`类交互非常有用。同时,`add`方法允许你根据日历规则增加或减少某个字段的值,比如增加一个月或一天。 比较时间...
3. 获取一年中的天数:`getActualMaximum()`方法可以得到指定年份和月份的最大天数,如`calendar.getActualMaximum(Calendar.DAY_OF_MONTH)`。 4. 时间比较:`before()`和`after()`方法可以用来比较两个`Calendar`...
int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); ``` 此外,`GregorianCalendar`还提供了添加和减去日期字段的方法,如`add`和`roll`。如果你想获取下一个月的日期,可以这样操作: ```java...
`Calendar`类提供了`before()`和`after()`方法来比较两个日期,以及`getTime()`方法将`Calendar`对象转换为`Date`对象,便于进行日期比较。 此外,`Calendar`类支持国际化,通过`Locale`参数来获取不同地区的日期...
Calendar类提供了多种方法来获取当前日期和时间,例如get(int field)方法可以获取当前日期的指定字段,例如年、月、日、星期等。同时,Calendar类也提供了set(int field, int value)方法来设置当前日期的指定字段。 ...
在计算某一月份的最大天数时,可以使用 Calendar 类的 getActualMaximum 方法。首先,需要使用 getInstance 方法获取当前时间,然后使用 clear 方法清除所有的时间信息,接着使用 set 方法设置年份和月份,最后使用 ...
`Calendar`类还提供了`getActualMaximum(Calendar.DAY_OF_WEEK_IN_MONTH)`和`getActualMinimum(Calendar.DAY_OF_WEEK_IN_MONTH)`方法,它们分别返回月份中最大和最小的周数。 在实际应用中,`Calendar`类常与其他...
获取一个月最后一天可以使用 Calendar 类的 getActualMaximum 方法,获取当前月份的最大的天数。然后可以使用 set 方法设置日期,并格式化输出。代码如下: ```java int MaxDay = c.getActualMaximum(Calendar.DAY_...
`java.util.Calendar`是一个抽象类,它提供了一种将日期和时间字段(如年、月、日、小时等)与特定瞬间(以毫秒为单位)之间转换的方法。例如,你可以创建一个`Calendar`实例,然后通过`add()`方法来增加或减少日期...
Java 中的 Calendar 类是一个功能强大的日期和时间处理工具,提供了许多有用的方法来操作日期和时间。在本文中,我们将详细介绍如何使用 Calendar 类来打印日历。 首先,让我们来了解一下 Calendar 类的基本使用。...
在 Java 中,计算某一月份的最大天数可以使用 Calendar 类的 getActualMaximum() 方法。该方法返回指定日历字段的最大值。在计算某一月份的最大天数时,需要先 clear Calendar 对象,然后设置年份和月份,最后使用 ...
使用Calendar类的getActualMaximum方法可以获取指定月份的最大天数。例如,`time.getActualMaximum(Calendar.DAY_OF_MONTH)`会返回给定年份和月份的最大天数。注意,月份是从0开始的,所以1月是`Calendar.JANUARY`...
例如,计算某一月份的最大天数,可以使用 `Calendar` 类的 `getActualMaximum` 方法。首先,需要创建一个 `Calendar` 对象,设置年和月,然后使用 `getActualMaximum` 方法获取该月份的最大天数。 日期类的格式化...
`Calendar`类是Java中处理日期和时间的核心类之一,它提供了一系列的方法来获取和设置日期、时间的各种组件,如年、月、日、小时、分钟、秒等。例如,创建一个`Calendar`实例并设置特定的年份: ```java Calendar ...
此方法与上一个类似,但它将字符串转换为`java.sql.Date`。注意这里默认使用了`"yyyy-MM-dd"`作为日期格式。 ##### 1.3 `java.util.Date`到字符串 ```java public static String toStrDateFromUtilDateByFormat...
通过本文,我们将详细了解如何计算特定月份的最大天数、实现`Calendar`与`Date`之间的转换、格式化日期时间、计算一年中的星期数、使用`add()`和`roll()`方法调整日期,以及计算两个日期间的间隔天数。 #### 1. ...
int weekno = cal.get(Calendar.WEEK_OF_YEAR); ``` 也可以计算一年中的第几星期是几号,例如: ```java SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal...