Calender与Date

1.roll和add:

今天在使用Calender这个工具类的时候,发现使用roll()方法不能改变年数。

测试:

public static void main(String[] args) {
		Calendar ca = Calendar.getInstance();
		System.out.println(ca.getTime());
		ca.roll(Calendar.DAY_OF_YEAR, 20);
		System.out.println(ca.getTime());
	}

效果:

Calender与Date_第1张图片


本来想的是获得2014的一月12号,但是却得到是2013年的,是为啥呢??

然后,我们来看jdk的说法吧。

roll:向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。

意思是说,不能改变当前设定的最大时间字段,比如设定的是day of week ,那么只能在这周内取值,设定的是day of month,就只能在本月内取值。


如果想改变那个最大时间段,就得用另外的方法。

add (int field ,int amount): 根据日历的规则,为给定的日历字段添加或减去指定的时间量.

这个方法就不存咋设定那个时间段不能改变。

测试:

	public static void main(String[] args) {
		Calendar ca = Calendar.getInstance();
		System.out.println(ca.getTime());
		ca.add(Calendar.DAY_OF_YEAR,10 );
		System.out.println(ca.getTime());
	}

效果:

Calender与Date_第2张图片


注意:

1.roll :

是在给定的时间段内,循环直到获取到该时间段内的值。

2.day of week in month:指定当前月中的第几个星期,不是哪天。

3.改变小时:

	java.text.DateFormat sdf = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss");
        Calendar ca = Calendar.getInstance();
        ca.add(Calendar.DAY_OF_YEAR, 3);
        ca.set(Calendar.HOUR_OF_DAY, 05);
        ca.set(Calendar.MINUTE, 20);
        System.out.println(sdf.format(ca.getTime()));

效果:

2014-08-10 05:20:03

2.日期格式化:

24小时时间格式:

Date cur = new Date();
		java.text.DateFormat form=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss aaa");
		System.out.println(form.format(cur.getTime()));

效果:

2014-08-07 14:29:33 下午

12小时时间格式:

Date cur = new Date();
		java.text.DateFormat form=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss aaa");
		System.out.println(form.format(cur.getTime()));

效果:

2014-08-07 02:49:18 下午

Calender与Date_第3张图片

可截取自己需要的时间段,如:

Date cur = new Date();
		java.text.DateFormat form=new SimpleDateFormat("MM.dd hh:mm aaa");
		System.out.println(form.format(cur.getTime()));

效果:

08.07 02:58 下午

为了便于url传输,需要将空格转为asic码:

例如:

	java.text.DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Calendar ca = Calendar.getInstance();
		ca.add(Calendar.DAY_OF_YEAR, 3);
		ca.set(Calendar.HOUR_OF_DAY, 05);
		ca.set(Calendar.MINUTE, 20);
		System.out.println(sdf.format(ca.getTime()).replace(" ", "%20"));

效果:

2014-08-10%2005:20:39




你可能感兴趣的:(日历)