关于Date的一个问题

public static void testDate() {
String payTime = "2017-10-26 00:12:49";
String expTime = "25";
int expDay = Integer.parseInt(expTime);
Date datePay = Tools.stringToDate(payTime);

Date dateExp = new Date(datePay.getTime() + 24*60*60*1000 * expDay);

String expDate = Tools.getTimeStrByDate(dateExp);

System.out.println(expDate);

}


简单介绍一下,这是一个获取  从payTime天起,expTime天后的日期的方法,初看没什么问题,但是当expTime = 25或大于25时,就开始出现问题了

expTime = 99  输出 2017-10-25 14:07:14

expTime = 30  输出 2017-10-06 07:10:01

expTime = 28  输出 2017-10-04 07:10:01

expTime = 25  输出 2017-10-01 07:10:01

expTime = 24  输出 2017-11-19 00:12:49

expTime = 20  输出 2017-11-15 00:12:49

expTime = 10  输出 2017-11-05 00:12:49

看输出,expTime <= 24时,可以输出正常的日期,如果大于24,则输出错误的日期。


如果需要计算多少天以后的时间建议使用下面这种方式进行计算,虽然可以计算得到相对准确的日期,但是时间上还是有问题的

Date dat = null; Calendar cd = Calendar.getInstance(); 
cd.add(Calendar.DATE, expDay); 
dat = cd.getTime(); 
SimpleDateFormat dformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
//Timestamp date = Timestamp.valueOf;
System.out.println(dformat.format(dat));

Date after = Tools.stringToDate(dformat.format(dat));
long ch = after.getTime() - datePay.getTime();
System.out.println(ch/24/60/60/1000);

输出的结果:

2018-10-26 01:30:39
365

-------------------------------------------------------------------------------------------------------

产生问题的原因和更好的解决办法还会继续研究并更新


该问题的后续更新:

他喵的~    这个怪我了,大半夜的脑子不好使了,代码写的有问题,直接上新代码

String expTime = goodsInfo.getExpTime();
int expDay = Integer.parseInt(expTime);
Date datePay = Tools.stringToDate(payTime);


Calendar cd = Calendar.getInstance();
cd.setTime(datePay);
cd.set(Calendar.DATE, cd.get(Calendar.DATE) + expDay);
Date dateExp = cd.getTime();
String expDate = Tools.getTimeStrByDate(dateExp);


这回这个应该是可以的了,其实之前的代码方向上基本正确的,但是我写的有问题,清点喷我,我是码农啊~~~

猜你喜欢

转载自blog.csdn.net/heye644171300/article/details/78348524