Java:取得当前日期一周之前/之后的日期,或者是一月之前/之后的日期
2013-03-05 09:16
393 查看
一. 旧的方式
参考以前的博客:Java中日期容易计算错误的问题1. 需求
取得当前时间前一周的时间。比如说:今天是2009-4-23,运行结果则为:2009-4-16。
代码:一般人肯定会这样写:
String lastModified = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date((new java.util.Date().getTime() - 7*24*60*60*1000)));
表面上看结果是正确的。
2. 问题
如果想取得当前时间前一个月的时间,直接修改上面的7为30,形如:30 * 24 * 60 * 60 * 1000,结果肯定不是你想要的2009-3-24。而是2009-5-13,你没看错!
3. 原因
java日期的数值表达值为long类型的,应该用long型参数去做操作。7 * 24 * 60 * 60 * 1000默认为整型操作,它没有溢出;但30 * 24 * 60 * 60 * 1000对于整型来说是溢出的,变成负数,所以日期反而加大。
4. 解决
String lastModified = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date((new java.util.Date().getTime() - (long)30*24*60*60*1000)));
这样写就可以解决问题了。
二. 新的方式
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd"); java.util.Calendar cal = java.util.Calendar.getInstance(); cal.setTime(sdf.parse("2009-4-23")); cal.add(java.util.Calendar.DATE, -7); // 向前一周;如果需要向后一周,用正数即可 // cal.add(java.util.Calendar.MONTH, -1); // 向前一月;如果需要向后一月,用正数即可 System.out.println(sdf.format(cal.getTime()));
这样就可以取得一个月以前或者是一周以前的日期了。
相关文章推荐
- java 获取当前天之后或之前7天(任意)日期
- java和js获取当前天之后或之前7天(任意)日期
- Java 取得当前日期之后N天的日期 zz
- java 获取当前天之后或之前7天日期
- java 获取当前日期 或者当前时间
- Java用于取得当前日期相对应的月初,月末,季初,季末,年初,年末时间
- java写的日期工具,根据设置日期获取指定的一周或者一个月的所有日期
- java获取当前日期所在的周的周一,并以周一为一周开始
- Java 指定日期和日期间隔,返回间隔 之前 | 之后 的日期
- java获取当前时间所在一周的周一和周日日期
- java取得当前日期增加一天或多天
- JAVA 取得当前日期的前一天,后一天
- mysql获取当前时间,日期之前和日期之后的日期
- 获取当前日期之前之后任意时间
- Java取得明天或者前一天的日期
- Java根据当前日期获得这一周的日期
- Java常用类库--实例操作--取得当前日期
- java获取某日期之前/之后一天的日期(实现代码)
- Java根据当前日期获得这一周的日期
- iOS 得到当前时间 之前 或者 之后 N天的日期