Java 每秒钟检查一次时间

Java 每秒钟检查一次时间,java,multithreading,twitter,Java,Multithreading,Twitter,我计划制作一个推特机器人,在我想要的时间推特。我用下面的代码每秒都能得到时间,但是当我知道时间是我想要的时间时,什么也没有发生,它会继续打印时间,就像我设置的时间与实际时间不同一样,即使它们是相同的。这是我的密码: 导入java.util.Calendar public class Main { public static void main(String[] args) { while (true) { Calendar a = Calendar

我计划制作一个推特机器人,在我想要的时间推特。我用下面的代码每秒都能得到时间,但是当我知道时间是我想要的时间时,什么也没有发生,它会继续打印时间,就像我设置的时间与实际时间不同一样,即使它们是相同的。这是我的密码: 导入java.util.Calendar

public class Main {
    public static void main(String[] args) {
        while (true) {
            Calendar a = Calendar.getInstance();

            //The time I want
            String wTime = "19:24:12";

            String sec = Integer.toString(a.get(Calendar.SECOND));
            String min = Integer.toString(a.get(Calendar.MINUTE));
            String hour = Integer.toString(a.get(Calendar.HOUR_OF_DAY));
            String time = hour + ":" + min + ":" + sec;

            System.out.println(time);
            if(time == wTime){
                //Tweet something
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
使用
.equals()
而不是
=
来比较字符串:

if (time.equals(wTime)) {
    // Tweet something
}
然后您可以定义MyClass类:

class MyClass implements Runnable {
    @Override
    public void run() {
        // do some needed work
    }
}
然后你可以这样做:

scheduler.scheduleAtFixedRate(new MyClass(), 1, 1, TimeUnit.SECONDS);

字符串通过
java.util.Timer
中的.equals和not==Use
Timer
类或
java.util.TimerTask
中的
TimerTask
进行检查。感谢这也是问题所在,请注意睡眠(1000)是个坏主意。您的代码需要几毫秒才能运行,您可以在19:24:11:990开始睡眠,然后从Calendar.getInstance返回,时间为19:24:13:003。更好的睡眠(1000 System.currentTimeMillis()%1000)。使用while是一个好主意吗(true)@冈特拉姆布洛姆
scheduler.scheduleAtFixedRate(new MyClass(), 1, 1, TimeUnit.SECONDS);