为了账号安全,请及时绑定邮箱和手机立即绑定

将“一年中的某一天”作为到期日期存储在数据库中,但如果年份发生变化,这将不起作用

将“一年中的某一天”作为到期日期存储在数据库中,但如果年份发生变化,这将不起作用

慕容708150 2021-09-15 17:30:32
对于我正在创建的东西,用户可以购买可以使用 X 天的商品。该项目的到期日期存储在我的 MySQL 数据库中,我决定将它存储为一个整数,它代表这一年已经过去的天数。然后我使用这个值来检查当前过去的天数是否大于到期日,然后使项目到期。但是,如果该商品是在 12 月的第 360 天购买的,而到期日期是 30 天后,也就是明年的第 25 天,我将这两个值进行了比较-该商品会提前到期 360 > 25.while (set.next()) {    String uuid = set.getString("UUID");    String rank = set.getString("Rank");    int expiry = set.getInt("Expiry");    if (DATE < expiry) {        pipe.hset("donator_data", set.getString("UUID"), set.getString("Rank"));    } else {        // expire rank    }}DATE是一年中过去的天数。此代码在服务器启动时运行一次,因此即使它不必太高效,但为了安心,我还是希望如此。我还考虑使用日期对象并比较它们,实际上我只需要两个日期,到期(日/月/年)和当前(日/月/年)然后编写一些代码来比较它们(例如 if (expiryYear < year) | | if (expiryMonth < 月) 等。关于如何克服这个问题的任何其他建议?
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

无疑最简单的是使用 MySQL 的date数据类型来存储到期日期。


    LocalDate expiration = set.getObject("expiry", LocalDate.class);

    LocalDate today = LocalDate.now(ZoneId.of("Europe/London"));

    if (today.isBefore(expiration)) {

        System.out.println("Fine");

    } else  {

        System.out.println("Expired");

    }

将到期日期存储到数据库中:


    LocalDate expiration = LocalDate.now(ZoneId.of("Europe/London")).plusDays(30);

    yourPreparedStatement.setObject(3, expiration);

(假设到期日期应替换为您的 SQL 语句中的第三个问号以进行保存)。


查看完整回答
反对 回复 2021-09-15
  • 1 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信