java calendar 时间

import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Ctest
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
Calendar ca = Calendar.getInstance();
ca.set(Calendar.YEAR,2008);
ca.set(Calendar.MONTH,2);
ca.set(Calendar.DATE,29);
ca.add(Calendar.YEAR,1);
Format s = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(s.format(ca.getTime()));
}
}

我2008-02-29 加上一年 就是2009-03-29

这是为什么?
我用js 2008-02-29 加上一年 就是2009-03-01 号?java能否像js这样得到2009-03-01?
我的意思是:08年2月有29号,加一年的话,09年2月没有29号,js就会给出3月1号,java给出2009-03-29???
这是java特定的么??

Calendar ca = Calendar.getInstance();
ca.set(Calendar.YEAR,2008);
ca.set(Calendar.MONTH,2);
ca.set(Calendar.DATE,29);
//ca.add(Calendar.YEAR,1);
ca.add(Calendar.MONTH,1);

Format s = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(s.format(ca.getTime()));
我2008-02-29加一个月 ,为啥输出 2008-04-29????真是费解

1、计算某一月份的最大天数

Calendar time=Calendar.getInstance(); 
time.clear(); 
time.set(Calendar.YEAR,year); 
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0            
intday=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数

注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间。
2、Calendar和Date的转化
(1) Calendar转化为Date

Calendar cal=Calendar.getInstance();
Date date=cal.getTime();

(2) Date转化为Calendar

Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);

3、格式化输出日期时间

Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(df.format(date));

4、计算一年中的第几星期
(1)计算某一天是一年中的第几星期

Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
int weekno=cal.get(Calendar.WEEK_OF_YEAR);

(2)计算一年中的第几星期是几号

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.WEEK_OF_YEAR, 1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(df.format(cal.getTime()));
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-03
是你搞错了。java中的月份是从0-11来表示我们中国的1-12月。你用的ca.set(Calendar.MONTH,2)换成中国的当然就是3月份了。对吧,确实虽然是小问题,但是忽略了这些小问题有时候也会让人很头痛的。
另外如果你把一个平年的2月设置成29日,java虚拟机是不会纠错的,照样可以给你输出出来。本回答被提问者采纳
第2个回答  2009-08-03
from java API
MONTH

public static final int MONTH

指示月份的 get 和 set 的字段数字。这是一个特定于日历的值。一年中的第一个月是 JANUARY,它为 0;最后一个月取决于一年中的月份数。

另请参见:
JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER, UNDECIMBER, 常量字段值

java.util.Calendar
public static final int AM 0
public static final int AM_PM 9
public static final int APRIL 3
public static final int AUGUST 7
public static final int DATE 5
public static final int DAY_OF_MONTH 5
public static final int DAY_OF_WEEK 7
public static final int DAY_OF_WEEK_IN_MONTH 8
public static final int DAY_OF_YEAR 6
public static final int DECEMBER 11
public static final int DST_OFFSET 16
public static final int ERA 0
public static final int FEBRUARY 1
public static final int FIELD_COUNT 17
public static final int FRIDAY 6
public static final int HOUR 10
public static final int HOUR_OF_DAY 11
public static final int JANUARY 0
public static final int JULY 6
public static final int JUNE 5
public static final int MARCH 2
public static final int MAY 4
public static final int MILLISECOND 14
public static final int MINUTE 12
public static final int MONDAY 2
public static final int MONTH 2
public static final int NOVEMBER 10
public static final int OCTOBER 9
public static final int PM 1
public static final int SATURDAY 7
public static final int SECOND 13
public static final int SEPTEMBER 8
public static final int SUNDAY 1
public static final int THURSDAY 5
public static final int TUESDAY 3
public static final int UNDECIMBER 12
public static final int WEDNESDAY 4
public static final int WEEK_OF_MONTH 4
public static final int WEEK_OF_YEAR 3
public static final int YEAR 1
public static final int ZONE_OFFSET 15
第3个回答  2009-08-03
// 给你想要的答案
// 利用日志强制转换强制格式化实现了
Calendar ca = Calendar.getInstance();
ca.set(Calendar.YEAR,2008);
ca.set(Calendar.MONTH,1);
ca.set(Calendar.DATE,29);
// ca.set(2008, 1, 29);

String compile = "yyyy-MM-dd";
Format s = new SimpleDateFormat(compile);
try
{

Date date = null;
System.out.println(s.format(ca.getTime()));
// 处理时间
// ca.add(Calendar.YEAR, 1);
// 加一年
String strDate = s.format(ca.getTime());
// 处理后的心日期
String strNewDate = "";
String[] arrDate = strDate.split("-");

if(arrDate != null && arrDate.length > 0){
String strYear = arrDate[0];
strYear = (Integer.parseInt(strYear) + 1)+ "";
strNewDate = strYear + "-" + arrDate[1] + "-" + arrDate[2];
}

System.out.println("处理用的新日期为 strNewDate :" + strNewDate);
date = new Date(((java.util.Date)s.parseObject(strNewDate)).getTime());
System.out.println("最忠date : " + s.format(date));
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
第4个回答  2009-08-03
Calendar.MONTH是月份的索引,并不是真正的几月。如果表示2月,要用ca.set(Calendar.MONTH,1);
所以代码应该是:
ca.set(Calendar.YEAR,2008);
ca.set(Calendar.MONTH,2);
ca.set(Calendar.DATE,29);
ca.add(Calendar.YEAR,1);