如何使用Java找到第二天的开始

时间:2012-08-01 04:22:53

标签: java datetime calendar

在我的简单应用程序中,我使用new Timestamp(System.currentTimeMillis())以编程方式将时间戳存储到数据库表中。

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

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

* 简单来说 - 将今天的点击存储在一个列中并将点击存储到另一列,所以如果今天到期,我想在今天添加点击总数,然后将today_clicks列计入到0然后当第二天有新的点击时,将其存储在today_clicks列中,方法是将其计数为1 *

我该如何决定?我应该使用哪个Java类?

3 个答案:

答案 0 :(得分: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());

答案 1 :(得分: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
}

答案 2 :(得分:0)

如果我理解正确,您正在寻找一种在数据库中最好地存储数据的方法。您已决定维持今日点击列和点击直到现在列。 (我可能不在此基础上,但问题并不完全清楚)

我建议你不要像你所描述的那样尝试操纵列到列的数据,而是通过每天维护点击次数来实现:

 date | count
------|-------
Jul 31| 10876
Aug  1| 15721

(其中date是db timestamp / date数据类型中的a)

这将如何运作?

在启动时,您可以将所有行带入内存,并根据需要将其计数加起来以获得点击直到现在的值。

然后,您可以对今天的行进行特殊处理,您可以使用今日点击次数值更新相应的上下文。

要确定您是否已超过日期限制,您可以简单地:

  1. 维护“今天”的日历实例(称之为todayCal
  2. 每次录制点击(称为clickCal
  3. 时都会生成新的日历
  4. todayCalclickCal
  5. 测试Calendar.DAY_OF_YEAR
  6. 如果您确定了日期滚动,则会在数据库中保留今天的点击次数并初始化今天的新点击次数。
  7. 如果您要在内存中保持总点击次数,则可以在此时进行数学计算。