Java电商项目 使用Calendar时间入库不统一

buguancheng 2017-10-13 12:47:28
各位好,这是一个电商项目,先说一下需求以及问题场景:
功能是在web管理页面点提交生成一个优惠券,如图:

入库结果如图:

问题描述:生成优惠券时间不对。例如:今天创建的优惠券,有效时间输入1天,提交之后数据库优惠券到期时间是第二天的23:59:59
但是,当我再次添加一个优惠券,有效时间还是输入1天,提交后数据库优惠券到期时间变成第三天的00:00:00
实际上这两个时间效果是一样的,但是展示给用户看的时候就不一样了,(展示给用户只显示到天的日期,不显示时分秒)。这样就给用户造成误解。代码如下:
// 用户优惠券
public int userCouponRelation(int userId, boolean newUser, String exchange) {
int i = 0;
List<ComicCoupon> couponList = new ArrayList();
if (newUser) {
couponList = comicCouponMapper.getCouponByNewUserAndExchange("T", null);
} else {
couponList = comicCouponMapper.getCouponByNewUserAndExchange("F", exchange);
}
if (couponList == null || couponList.isEmpty())
return i;
ComicUserCoupon userCoupon = null;
Date date = new Date();
List<ComicUserCoupon> userCouponList = new ArrayList();
for (ComicCoupon comicCoupon : couponList) {
Integer couponId = comicCoupon.getId();
Integer validate = comicCoupon.getCouponValidate();//手动输入的优惠券天数,例如:1(1天) 2(2天),不是时间控件选择的
userCoupon = new ComicUserCoupon();
userCoupon.setCouponsId(couponId);
userCoupon.setUserId(userId);
userCoupon.setCreateTime(date);//点击提交时优惠券生成时间(就是用户领取优惠券的时间)
userCoupon.setValidateTime(getEndTime(date, validate));//最终生成优惠券有效期(优惠券生成时间+优惠天数)
userCouponList.add(userCoupon);
}
comicCouponMapper.addUserCoupon(userCouponList);
i = 1;
return i;
}

private Date getEndTime(Date date, Integer day) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
date = calendar.getTime();


return date;
}


大家帮我分析看看什么原因啊
...全文
242 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
亚之述 2017-10-13
  • 打赏
  • 举报
回复
建议数据库中改为存时间戳
「已注销」 2017-10-13
  • 打赏
  • 举报
回复
private Date getEndTime(Date date, Integer day) {
	Calendar calendar = Calendar.getInstance();
	calendar.setTime(date);
	calendar.set(Calendar.HOUR_OF_DAY, 0);
	calendar.set(Calendar.MINUTE, 0);
	calendar.set(Calendar.SECOND, 0);
	calendar.set(Calendar.MILLISECOND, 0);
	calendar.add(Calendar.DAY_OF_MONTH, day + 1);
	calendar.add(Calendar.SECOND, -1);
	return calendar.getTime();
}
cyh_syp 2017-10-13
  • 打赏
  • 举报
回复
private static Date getEndTime(Date date, Integer day) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, day); date = calendar.getTime(); return date; } 或者 private static Date getEndTime(Date date, Integer day) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.HOUR_OF_DAY, 23); calendar.add(Calendar.MINUTE, 59); calendar.add(Calendar.SECOND, 60); date = calendar.getTime(); return date; }
cyh_syp 2017-10-13
  • 打赏
  • 举报
回复
getEndTime方法改成这样 private Date getEndTime(Date date, Integer day) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DATE, calendar.get(Calendar.DATE)+day); date = calendar.getTime(); return date; }
cyh_syp 2017-10-13
  • 打赏
  • 举报
回复
getEndTime方法改成这样 private Date getEndTime(Date date, Integer day) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DATE, calendar.get(Calendar.DATE)+1); date = calendar.getTime(); return date; }

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧