public abstract class Calendar implements Serializable, Cloneable{}
public static Calendar getInstance()
{
//其实,这个方法内部也是return new GregorianCalendar(zone, aLocale);利用其具体的实现子类
return createCalendar(TimeZone.getDefault(), Locale.getDefault());
}
/**吗的,原来Calendar是如此的抽象,以至于我们必须要用到 GregorianCalendar(公历历法) */
public class GregorianCalendar extends Calendar{}
public static void main(String[] args) {
Calendar c1 = Calendar.getInstance();
System.out.println(c1.getTime());
//年,月,日,时,分,秒
Calendar c2 = new GregorianCalendar(2008,8,8,18,10,5);
System.out.println(c2.getTime());
}
结果:
Mon Dec 13 11:03:59 CST 2010
Mon Sep 08 18:10:05 CST 2008
c2好像出错了,打印的是Sep 汗一个~~看源码吧
public final static int JANUARY = 0;
public final static int FEBRUARY = 1;
public final static int MARCH = 2;
public final static int APRIL = 3;
public final static int MAY = 4;
public final static int JUNE = 5;
public final static int JULY = 6;
public final static int AUGUST = 7;
public final static int SEPTEMBER = 8;
public final static int OCTOBER = 9;
public final static int NOVEMBER = 10;
public final static int DECEMBER = 11;
public final static int UNDECIMBER = 12;
january是从0开始的,擦了。推荐如下方法,看起来更美观,有点像sql中的TYPE.VARCHAR
Calendar c3 = new GregorianCalendar(2008,Calendar.FEBRUARY,8,18,10,5);
System.out.println(c3.getTime());
Fri Feb 08 18:10:05 CST 2008
*
若想取第几个月,则用
Calendar c3 = new GregorianCalendar(2008,Calendar.FEBRUARY,8,18,10,5);
System.out.println(c1.get(Calendar.MONTH));
同理,上下午就是c1.get(Calendar.AM_PM);
还有一个比较实用的,与Date转化
public final Date getTime() {
return new Date( getTimeInMillis() );
}
补充一个add方法,就像oracle中的Add_months(d,n)一样的用法,n可正可负。
工作中写了一个简单的方法,取一个月的最后一天,思路就是下个月的第一天减去1即可。
java.util.Calendar c = new GregorianCalendar(2010,10,01);
c.add(Calendar.DATE, -1);
System.out.println(c.get(Calendar.MONTH)+1);
System.out.println(c.get(Calendar.DAY_OF_MONTH));
System.out.println(c.get(Calendar.YEAR));
String endDate = String.valueOf(c.get(Calendar.YEAR))+String.valueOf(c.get(Calendar.MONTH)+1)+String.valueOf(c.get(Calendar.DAY_OF_MONTH));
System.out.println(endDate);
10
31
2010
20101031