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 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上