请教有关java程序Calendar类的一个时间小问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 06:30:55
程序代码如下:
import java.util.*;
class javatime{
javatime(){
}
public static void main(String args[]){
Calendar time=Calendar.getInstance();
int a=time.get(Calendar.DAY_OF_WEEK);
int b=time.get(Calendar.DAY_OF_MONTH);
System.out.println(a);
System.out.println(b);
time.set(Calendar.YEAR,2008);
time.set(Calendar.MONTH,5);
int x=time.get(Calendar.DAY_OF_WEEK);
int y=time.get(Calendar.DAY_OF_MONTH);
System.out.println(x);
System.out.println(y);
}
}

程序运行的时间是2008年5月12号星期一,前两行显示的结果是2 12,可是后两行显示的结果是5,12,现在我怎么也想不明白为什么第三行显示的是5而不是2呢?请教高手帮说明下。谢谢。

Calendar.MONTH 从0开始
你设置完 time.set(Calendar.MONTH,5)后,判断是其实是6月12日

再给你一些详细资料
MONTH加1的原因:
public static final int MONTH
指示月份的 get 和 set 的字段数字。这是一个特定于日历的值。在格里高利历和罗马儒略历中一年中的第一个月是 JANUARY,它为 0;最后一个月取决于一年中的月份数。
简单来说,因为这个值的初始值是0,因此我们要用它来表示正确的月份时就需要加1。
WEEK减1的原因:
public static final int DAY_OF_WEEK
get 和 set 的字段数字,指示一个星期中的某天。该字段可取的值为 SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY 和 SATURDAY
观察代码,你会发现其实week是用来确定随后的字符串week1该如何截取的,我们知道DAY_OF_WEEK是获取当前日期是一周中的第几天,而一周从周日算起,因此当我们取得这个值之后,为了要正确的截取出随后的字符串week1中的那个中文字符,因此它需要减1来达到目的。你只要跟踪一下程序运行,观察变量的赋值就会理解它这样编写的用意了。
定义day时不用的原因:
public static final int DATE
get 和 set 的字段数字,指示一个月中的某天。它与 DAY_OF_MONTH 是同义词。一个月中第一天的值为 1。
根据定义我们可以知道,这个值取得后不需要做任何变更就是程序需要的值。
substring(week, week+1):
public String substring(int beginIndex,
int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。
根据定义,我们就知道这个方法的用途了。举例