0

我的问题有两个。我试图尽可能优雅地处理它。

给出以下格式的日期,

 YYYYMMDD hh:mm:ss

如何在不同天数后找到相应的日期?例如,如果给定一个日期,我需要能够找到该格式“x”天之后的相应日期。

这个生成的日期是我将存储在数据库的activation_date 列中的日期。然后我想每晚查询数据库,看看是否是那个日期。如果是这样,我会将不同列中项目的状态从挂起更改为活动。

这似乎是处理我的问题的最佳方法,但它似乎不是很容易解决。

另一种方法是我在数据库中创建一个 days_till_activation 列,并有一个脚本每晚减少该列中每个条目的值,直到达到零。一旦达到零,脚本将更改状态。问题在于这似乎是处理数据库的一种非常糟糕的方式。它涉及到对数据库的大量写入,而不是仅在需要时才这样做。

无论如何,任何想法将不胜感激。我需要在 java 中处理解决方案,但伪代码会很好。

4

2 回答 2

1

给出以下格式的日期,

YYYYMMDD hh:mm:ss

这是你的第一个问题。不要考虑特定格式的日期。确保您的数据库模式使用适当的日期/时间字段类型,并在您的 Java 代码中使用适当的类型。除非您将其展示给用户,否则您永远不需要查看字符串表示形式。

幸运的是,这部分很简单:

如何在不同天数后找到相应的日期?

我建议尽可能使用Joda Time来表示您的日期和时间值。这很容易:

LocalDate date = ...;
LocalDate activation = date.plusDays(activationDays);

可以只使用java.util.Date/ Calendar,但我建议您在从数据库中提取数据时尽快转换为 Joda Time 类型,并在最后一刻转换回本机 Java 类型。这样,您就可以尽可能多地避免 Java 类型的丑陋。

于 2012-05-22T18:18:26.273 回答
0

在这种情况下,我会选择一个包含过期时间戳 ( currentTimeMilis() + x * MILLIES_PER_DAY) 的整数类型列,使您的查询非常容易(where expiration < ?将参数绑定到currentTimeMilis()。)

选择日期/时间类型列会增加解决方案的复杂性,使行为依赖于数据库安装(操作系统语言更改可能会产生影响。)

于 2012-05-22T18:23:17.137 回答