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?哪位大神告诉我为什么?以及更好的处理代码,小弟拜谢啦!
写了一个完整的测试程序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("商品还在保质期!");
}
}
}
测试结果如下图:
代码不算太复杂,没有写过多的注释。
关于日期的一些计算和处理,这个范例里基本涉及到了。你可以对照题目的情况摘取使用。
附: 这个问题你几天之前好象问过? 当时想回答,可你已经采纳别的答案了。希望这次还来得及
用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢。
//没有set 默认用今天做测试
Calendar d = Calendar.getInstance();// 今天 2017-05-25
d.add(Calendar.MONTH, 2);//月份加+2
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.err.println(sdf.format(d.getTime()));
答案:2017-07-25
d.add(Calendar.MONTH, editModel.getShelfLife());
package com.enuedu.zqh00;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Demo {
private static Date date;
private static Date date1;
public static void main(String[] args) {
System.out.println("请输入第一个日期:");
String a=new Scanner(System.in).nextLine();
System.out.println("请输入第二个日期:");
String b=new Scanner(System.in).nextLine();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
Date date1=null;
try {
date = sdf.parse(a);
} catch (ParseException e) {
e.printStackTrace();
}
try {
date1 = sdf.parse(b);
} catch (ParseException e) {
e.printStackTrace();
}
long day=(date.getTime()-date1.getTime())/(24*60*60*1000);
System.out.println(day);
}
}