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()); }
本来想的是获得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()); }
注意:
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 下午
可截取自己需要的时间段,如:
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