Java 比较用户定义的时间和当前时间

Java 比较用户定义的时间和当前时间,java,date,time,compare,Java,Date,Time,Compare,我试图将格式为HH:MM的用户定义时间与无限循环中的当前时间进行比较。当它们相等时,应该发生一些动作 我使用了以下代码: //taking user input DateFormat sdf = new SimpleDateFormat("hh:mm"); String time = jFormattedTextField1.getText(); userTime = sdf.parse(time); //taking current time Date timeNow = new Date(

我试图将格式为HH:MM的用户定义时间与无限循环中的当前时间进行比较。当它们相等时,应该发生一些动作

我使用了以下代码:

//taking user input
DateFormat sdf = new SimpleDateFormat("hh:mm");
String time = jFormattedTextField1.getText();
userTime = sdf.parse(time);

//taking current time
Date timeNow = new Date();
while (true){
    if (timeNow.equals(userTime)){
    System.out.println("The time equals, task is done!");
    ChangingWindow window = new ChangingWindow(chosenColor);
当我打印这两个时间点时,我收到以下信息:

用户时间:1970年1月1日星期四10:35:00 CET

当前时间:2015年9月29日星期二10:33:21


当前时间显然还可以,但对于用户定义的时间,他会不断返回历元。如果有人有任何建议,我将不胜感激

如果不设置年、月、日,则从1970年1月1日开始

因此,基本上你需要将年、月、日设置为你喜欢的日期

在代码中,您只创建了一个新的日期设置小时和分钟,并将其他值保留为默认值

发件人:

此解析操作使用日历生成日期。在解析之前,将清除日历的所有日期时间字段,并且日历的日期时间字段的默认值将用于任何缺少的日期时间信息。 例如,如果解析操作中未给出年份值,则解析日期的年份值为1970年,并带有GregoriaCalendar


如果您只想比较时间
HH:MM
,我建议您使用:

“LocalTime是表示时间的不可变日期时间对象, 通常被视为小时分钟秒。”

“此类不存储或表示日期或时区。相反, 这是一种在挂钟上看到的当地时间的描述。”

编辑:回答你的评论

userTime
timeNow
不会更新,因此在每次迭代中,您总是比较相同的值。结果不会改变。您需要在
while

无论如何,我不能认为
而(true)
是个好主意。我不知道你需要实现什么,但如果你想等到用户时间到了,那么我会确定到那时剩下的时间,并让进程睡眠这个时间量。比如:

long time = Duration.between(now, user).toMillils();
Thread.sleep(time);
这是OPs(*)固定代码,遵循托比亚斯的指示:

//get user time and current time
String time = jFormattedTextField1.getText();
LocalTime userTime1 = LocalTime.parse(time);
LocalTime timeNow = LocalTime.now().truncatedTo(ChronoUnit.SECONDS);

//calculate the diff in seconds
int timeDur = (int)Duration.between(timeNow, userTime1).getSeconds();
//start the timer object using this difference
Countdown countdown = new Countdown (timeDur);

(*)从编辑过的问题中提取,因为它不属于那里()

感谢Tobias,我仍然没有得到好的结果,但现在它看起来应该是这样的。你的想法是:while(true){if(timeNow.equals(userTime)){..做点什么…}比较这两次是个好主意吗?我的意思是,也许我没有得到最终的匹配,因为timeNow并不总是更新到当前时间,而只是更新到对象创建时的一个时间点?如果我没有说清楚,请让我知道。再次感谢!我已经回答了编辑帖子的问题,对于一个正确的答案来说时间太长了。你可能会问考虑使用一个自己的线程池而不是一个计时器,释放当前线程。如果你想发布你的固定代码,然后把它作为一个答案。编辑问题不是正确的方法。我把问题的新部分变成一个单独的答案,因为正如我所说的,我把这个答案变成了一个“社区维基”。,因此,如果您愿意,请随时改进。顺便说一句,“已接受答案”复选标记应保留在Tobias的答案上,因为这是帮助您解决问题的答案。谢谢Tom,下次我会记住它。
//get user time and current time
String time = jFormattedTextField1.getText();
LocalTime userTime1 = LocalTime.parse(time);
LocalTime timeNow = LocalTime.now().truncatedTo(ChronoUnit.SECONDS);

//calculate the diff in seconds
int timeDur = (int)Duration.between(timeNow, userTime1).getSeconds();
//start the timer object using this difference
Countdown countdown = new Countdown (timeDur);