AAAAA689 2017-05-25 07:59 采纳率: 0%
浏览 1705
已采纳

java,商品保质期计算总是不准确

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?哪位大神告诉我为什么?以及更好的处理代码,小弟拜谢啦!

  • 写回答

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 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示