java - 在数据库中存储“一年中的某一天”作为到期日期,但如果年份发生变化,这将不起作用
问题描述
对于我正在创建的东西,用户可以购买可以使用 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 < 月) 等
关于如何克服这个问题的任何其他建议?
解决方案
毫无疑问,最简单的是使用 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 语句中的第三个问号以进行保存)。
推荐阅读
- agens-graph - 如何在 AgensGraph 上查找标签的所有属性名称?
- cplex - cplex sos 类型 1 添加
- javascript - 数组包括重复错误,即使数据中存在值
- python-3.x - 从 python 向特定的 Outlook 电子邮件发送电子邮件回复
- sas - SAS: Delete missing items in a macro variable
- java - BoolQuery 在 ElasticSearch 中的“过滤器”的目的是什么?
- maximo - 从 Maximo autoscript 中的默认值控件获取默认值
- mysql - mysql> ERROR 1044 (42000): Access denied for user 'root'@'localhost'
- android - 是否会在 navigationManager.simulate() 之前收到到目的地的距离
- cmake - 尝试构建依赖于它的库时,libtiff 检查失败