【java】java.util.Calendar类学习


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值