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

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 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决