关于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);


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值