public void getExpiredDate2(ValueChangeEvent event) {
if(event.getNewValue() != null && editModel.getShelfLife()>0){
Date firstOutDate=(Date)event.getNewValue();
Calendar d = Calendar.getInstance();// 获得一个日历的实例
d.setTime(firstOutDate);//date转换calender
d.add(d.get(Calendar.MONTH) + 1, editModel.getShelfLife());// following the 0-based rule月是从零开始算的
editModel.setExpiredDate(d.getTime()) ;
}
}
这个是我的源代码,月不是在calendar里面直接相加?为什么得到的数值就是不准确,ShelfLife保质期,是int型的月份,firstOutDate为出厂日期,出厂日期直接加上保质期,可结果是错的,比如2017-5-1,输个2月,得到2017-5-15,why?哪位大神告诉我为什么?以及更好的处理代码,小弟拜谢啦!
java,商品保质期计算总是不准确
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 战在春秋 2017-05-25 09:14关注
写了一个完整的测试程序JudgeExpired.java,代码如下:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class JudgeExpired { public static void main(String[] args) throws ParseException { int month = 28;//保质期28个月 String productionDateString = "2012-3-18"; executeJudge(month,productionDateString); } public static void executeJudge(int month,String productionDateString) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date productionDate = sdf.parse(productionDateString); //生产日期 Calendar c = Calendar.getInstance(); c.setTime(productionDate); int yearAdd = month /12 ; //计算整的保质年份 int monthAdd = month % 12 ; //以及月份 c.add(Calendar.YEAR, yearAdd); c.add(Calendar.MONTH, monthAdd); Date ExpiredDate = c.getTime(); System.out.println("商品生产时间为:"+ sdf.format(productionDate)); System.out.println("商品保质期为:"+ month + "个月" ); System.out.println("商品过期时间为:"+ sdf.format(ExpiredDate)); Date currentDate = sdf.parse(sdf.format(new Date())); //当前日期 if (currentDate.after(ExpiredDate)){ System.out.println("截止到今天商品已经过期!"); } else{ System.out.println("商品还在保质期!"); } } }
测试结果如下图:
代码不算太复杂,没有写过多的注释。
关于日期的一些计算和处理,这个范例里基本涉及到了。你可以对照题目的情况摘取使用。附: 这个问题你几天之前好象问过? 当时想回答,可你已经采纳别的答案了。希望这次还来得及
用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用
悬赏问题
- ¥15 这个复选框什么作用?
- ¥15 单通道放大电路的工作原理
- ¥30 YOLO检测微调结果p为1
- ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
- ¥15 DS18B20内部ADC模数转换器
- ¥15 做个有关计算的小程序
- ¥15 MPI读取tif文件无法正常给各进程分配路径
- ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
- ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
- ¥15 setInterval 页面闪烁,怎么解决