Calendar--Java快速获取昨天日期
2015-08-24 18:45
597 查看
取昨天的日期,本想的截出来日期减一就好了。又一想不对,如果今天是一号怎么办?
现有两个办法
方法一:
Date as = new Date(new Date().getTime()-24*60*60*1000);
SimpleDateFormat matter1 = new SimpleDateFormat("yyyy-MM-dd");
String time = matter1.format(as);
System.out.println(time);
取出数字型的时间 再减去24*60*60*1000,就得到昨天的时间了;
这个有点过时了!
方法二:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
String yesterday = new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());
System.out.println(yesterday);
这个方法很方便,年月日都可以随心所欲的变!
下面总结一下关于Calendar这个类的使用方法:
1.Calendar与date的转换
2.Calendar的set方法
set(int field, int value) - 是用来设置"年/月/日/小时/分钟/秒/微秒"等值
field 的定义在 Calendar 中
set(int year, int month, int day, int hour, int minute, int second);
另外,月份的起始值为0而不是1,所以要设置八月时,我们用7而不是8。
例:calendar.set(Calendar.MONTH, 7);
另外我们要注意的一点是,Calendar 为了性能原因对 set() 方法采取延缓计算的方法。在 JavaDoc 中有下面的例子来说明这个问题:
3.Calendar的容错性
通过设置Lenient,默认为true,是进行容错的,当设为false,用户输入错误时间时依然纠错。
Tue Feb 01 00:00:00 PST 2000
Exception in thread "main" java.lang.IllegalArgumentException
at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:1368)
at java.util.Calendar.updateTime(Calendar.java:1508)
at java.util.Calendar.getTimeInMillis(Calendar.java:890)
at java.util.Calendar.getTime(Calendar.java:871)
at WhatIsCalendar.main(WhatIsCalendar.java:12)
当我们设置该 Calendar 为 Lenient false 时,它会依据特定的月份检查出错误的赋值。
4.Calendar的add()和roll()方法,很好很强大
add() 的功能非常强大,add 可以对 Calendar 的字段进行计算。如果需要减去值,那么使用负数值就可以了,如 add(field, -value)。
add() 有两条规则:
(1)当被修改的字段超出它可以的范围时,那么比它大的字段会自动修正。如:
(2)另一个规则是,如果比它小的字段是不可变的(由 Calendar 的实现类决定),那么该小字段会修正到变化最小的值。以上面的例子,9-31 就会变成 9-30,因为变化最小。
roll() 的规则只有一条:
当被修改的字段超出它可以的范围时,那么比它大的字段不会被修正。如:
现有两个办法
方法一:
Date as = new Date(new Date().getTime()-24*60*60*1000);
SimpleDateFormat matter1 = new SimpleDateFormat("yyyy-MM-dd");
String time = matter1.format(as);
System.out.println(time);
取出数字型的时间 再减去24*60*60*1000,就得到昨天的时间了;
这个有点过时了!
方法二:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
String yesterday = new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());
System.out.println(yesterday);
这个方法很方便,年月日都可以随心所欲的变!
下面总结一下关于Calendar这个类的使用方法:
1.Calendar与date的转换
Calendar calendar = Calendar.getInstance(); // 从一个 Calendar 对象中获取 Date 对象 Date date = calendar.getTime(); // 将 Date 对象反应到一个 Calendar 对象中, // Calendar/GregorianCalendar 没有构造函数可以接受 Date 对象 // 所以我们必需先获得一个实例,然后设置 Date 对象 calendar.setTime(date);
2.Calendar的set方法
set(int field, int value) - 是用来设置"年/月/日/小时/分钟/秒/微秒"等值
field 的定义在 Calendar 中
set(int year, int month, int day, int hour, int minute, int second);
另外,月份的起始值为0而不是1,所以要设置八月时,我们用7而不是8。
例:calendar.set(Calendar.MONTH, 7);
另外我们要注意的一点是,Calendar 为了性能原因对 set() 方法采取延缓计算的方法。在 JavaDoc 中有下面的例子来说明这个问题:
Calendar cal1 = Calendar.getInstance(); cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31 cal1.set(Calendar.MONTH, Calendar.SEPTEMBER); //应该是 2000-9-31,也就是 2000-10-1 cal1.set(Calendar.DAY_OF_MONTH, 30); //如果 Calendar 转化到 2000-10-1,那么现在的结果就该是 2000-10-30 System.out.println(cal1.getTime()); //输出的是2000-9-30,说明 Calendar 不是马上就刷新其内部的记录在 Calendar 的方法中,get() 和 add() 会让 Calendar 立刻刷新。Set() 的这个特性会给我们的开发带来一些意想不到的结果。我们后面会看到这个问题。
3.Calendar的容错性
通过设置Lenient,默认为true,是进行容错的,当设为false,用户输入错误时间时依然纠错。
import java.io.*; import java.util.*; public class WhatIsCalendar { public static void main(String[] args) throws Exception{ Calendar cal1 = Calendar.getInstance(); cal1.set(2000, 1, 32, 0, 0, 0); System.out.println(cal1.getTime()); cal1.setLenient(false); cal1.set(2000, 1, 32, 0, 0, 0); System.out.println(cal1.getTime()); } }运行结果:
Tue Feb 01 00:00:00 PST 2000
Exception in thread "main" java.lang.IllegalArgumentException
at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:1368)
at java.util.Calendar.updateTime(Calendar.java:1508)
at java.util.Calendar.getTimeInMillis(Calendar.java:890)
at java.util.Calendar.getTime(Calendar.java:871)
at WhatIsCalendar.main(WhatIsCalendar.java:12)
当我们设置该 Calendar 为 Lenient false 时,它会依据特定的月份检查出错误的赋值。
4.Calendar的add()和roll()方法,很好很强大
add() 的功能非常强大,add 可以对 Calendar 的字段进行计算。如果需要减去值,那么使用负数值就可以了,如 add(field, -value)。
add() 有两条规则:
(1)当被修改的字段超出它可以的范围时,那么比它大的字段会自动修正。如:
Calendar cal1 = Calendar.getInstance(); cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31 cal1.add(Calendar.MONTH, 1); //2000-9-31 => 2000-10-1,对吗? System.out.println(cal1.getTime()); //结果是 2000-9-30
(2)另一个规则是,如果比它小的字段是不可变的(由 Calendar 的实现类决定),那么该小字段会修正到变化最小的值。以上面的例子,9-31 就会变成 9-30,因为变化最小。
roll() 的规则只有一条:
当被修改的字段超出它可以的范围时,那么比它大的字段不会被修正。如:
Calendar cal1 = Calendar.getInstance(); cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 周日 cal1.roll(Calendar.WEEK_OF_MONTH, -1); //1999-6-1, 周二 cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 周日 cal1.add(Calendar.WEEK_OF_MONTH, -1); //1999-5-30, 周日 WEEK_OF_MONTH 比 MONTH 字段小,所以 roll 不能修正 MONTH 字段。
相关文章推荐
- 开源 java CMS - FreeCMS2.2 模型管理
- IDEA 14创建Maven管理的Java Web项目(图解)
- java设计模式学习 ----- 抽象工厂模式(Abstract Factory)
- java通过rJava调用R失败的问题总结
- Java 文件分块上传客户端源代码
- Java实现堆
- [转载]浅析Java中的final关键字
- java必看书籍
- eclipse集成jboss及jboss环境配置
- 同一字符串,MD5加密后出现不同的结果
- java多线程详解(5)-Threadlocal用法
- Spring事务配置的五种方式
- webservice示例(java)
- Spring MVC事务配置
- Windows FILETIME与JAVA Date互转
- maven 修改使用jdk版本
- java系统学习(四) --------java字符串的处理
- java系统学习(四) --------java字符串的处理
- java获取本机mac
- Introduction to Java Programming编程题9.3<检验密码>