java在特定时间使用计时器调度任务

java在特定时间使用计时器调度任务,java,timer,Java,Timer,我有一个数据库,从中检索显示提醒的时间(这是我的任务)。我将收到的时间输入计时器,但它不是在此时显示提醒,而是在当前时间立即显示提醒。有什么问题 rs = stmt.executeQuery(sql); while(rs.next()){ time=rs.getString ("time"); } timer = new Timer(); // Instantiate Timer Object timer.schedule(new Task(), timeFormat.parse(ti

我有一个数据库,从中检索显示提醒的时间(这是我的任务)。我将收到的时间输入计时器,但它不是在此时显示提醒,而是在当前时间立即显示提醒。有什么问题

rs = stmt.executeQuery(sql);
while(rs.next()){
   time=rs.getString   ("time");
}
timer = new Timer(); // Instantiate Timer Object
timer.schedule(new Task(), timeFormat.parse(time));

例如,显示提醒的时间为17:10:00。但它显示在17:00:00时,首先您必须获取currentDatetime和MemberDateTime之间的时间差Bt,并获取毫秒数,然后在timer.schedule(new Task(),timediff)函数中传递该毫秒数。 如下图所示

private long ScheduleTime(String strpostDate) {

    long hrs = 0;
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date curDate = null;
    Date postDate = null;
    String curdate = formatter.format(new Date());
    try {
        curDate = (Date) formatter.parse(curdate);
        postDate = (Date) formatter.parse(strpostDate);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    long diffInMs = postDate.getTime() - curDate.getTime();
    return diffInMs;

}
你的职能

rs = stmt.executeQuery(sql);
while(rs.next()){
datetime=rs.getString   ("time");
}
timer = new Timer(); // Instantiate Timer Object
timer.schedule(new Task(), ScheduleTime(datetime));

看起来日期信息不见了,因此默认为空白日期(可能是1月1日1970),这意味着计时器将立即运行任务。什么是时间格式?它是一个
SimpleDateFormat
对象吗?另外,从数据库中获得的
时间
字符串是什么?尝试在数据库中存储一个实际的
时间戳
,并改用
rs.getDate(String)
。请参阅new TimerTask(),非常感谢。问题与您所写的完全相同(解析时间后,日期自动变为1970年1月1日)。通过连接提醒的实际日期(它存储在数据库中的单独列中)及其时间(所有这些我都像字符串一样检索)解决了这个问题。然后我用SimpleDataFormat(“yyyy-MM-dd HH:MM:ss”)进行解析,并将结果设置到计时器中。那么呢?当然,如果你有
日期
,你可以把它传递给这个方法,让
定时器
类在内部管理延迟计算。。对吗?请检查此链接,也许您可以从中得到答案,我的问题是,如果您可以构建一个
日期
对象,为什么不直接将其传递给我引用的
计划
方法?您不需要获取系统日期并计算毫秒延迟。事实上,尝试在
ScheduleTime
方法中返回
postDate
,看看会发生什么!