2

在我的简单应用程序中,我使用new Timestamp(System.currentTimeMillis()).

现在,我有一个条件,我必须将特定日期的 onClick 计数存储在两个不同的列中。

因此,为此,我需要找出今天的 onClicks。那么我怎样才能知道 onclicks 发生的时间是否是今天呢?我的意思是说 8 月 1 日,我希望一列中的所有 onclick 计数和所有以前的 onClick 计数到另一列。

*简单来说 - 将今天的点击量存储在一个列中,并将迄今为止的点击量存储在另一列中,所以如果今天过期,我想添加今天的点击次数和总点击次数,然后将 today_clicks 列计数为 0,然后当有第二天的新点击,将其存储在 today_clicks 列中,从计数 1* 开始

我怎么能决定呢?我应该为此使用哪个 Java 类?

4

3 回答 3

4

不知道这是否是你所追求的。要开始第二天,您可以使用Calendar

public static Date nextDayStart(Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    cal.add(Calendar.DATE, 1);

    return cal.getTime();
}

明天获得:

Date tomorrow = nextDayStart(new Date());

从:Timestamp_Date

Timestamp s = new Timestamp(date.getTime());
于 2012-08-01T04:33:16.660 回答
0

首先,我建议看看Joda Time

其次,我会看看Calendar

Calendar lower = Calendar.getInstance();
lower.setTime(new Date());
lower.set(Calendar.HOUR_OF_DAY, 0);
lower.set(Calendar.MINUTE, 0);
lower.set(Calendar.SECOND, 0);
lower.set(Calendar.MILLISECOND, 0);

Calendar upper = Calendar.getInstance();
upper.setTime(new Date());
upper.set(Calendar.HOUR_OF_DAY, 23);
upper.set(Calendar.MINUTE, 59);
upper.set(Calendar.SECOND, 59);
upper.set(Calendar.MILLISECOND, 99);

Date clickTime = new Date(timeInMillis);
if (clickTime.after(lower.getTime()) && clickTime.before(upper.getTime())) {
    // Is today
}
于 2012-08-01T04:34:36.620 回答
0

如果我理解正确,您正在寻找一种将数据最好地存储在数据库中的方法。您已决定维护一个今天的点击次数列和一个直到现在的点击次数列。(我可能基于此,但从问题中并没有完全清楚)

我建议您不要像您所描述的那样尝试逐列操作数据,而是通过保持每天的点击次数来做到这一点:

日期 | 数数
------|-------
7月31日| 10876
8月1日| 15721

(其中日期是数据库时间戳/日期数据类型中的一个)

这将如何工作?

然后,在启动时,您可以将所有行放入内存,并将它们的计数相加以获得 clicks-until-now 值(如果需要)。

然后,您可以对今天的行进行特殊处理,在其中使用 clicks-for-today 值更新相应的上下文。

要确定您是否超过了一天的阈值,您可以简单地:

  1. 为“今天”维护一个日历实例(调用它todayCal
  2. 每次记录点击时生成一个新日历(调用它clickCal
  3. 测试 Calendar.DAY_OF_YEARtodayCalclickCal
  4. 如果您确定了一天滚动,则将今天的点击次数保存在数据库中并初始化一个新的今天点击次数。
  5. 如果您在内存中保持总点击次数,您可以在此时进行数学计算。
于 2012-08-01T05:16:06.413 回答