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

我试图将格式为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); 

当我打印这两个时间点时,我收到以下信息:

用户时间:周一1月01日10:35:00 CET 1970

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

当前时间显然是可以的,但是对于用户定义的时间,他一直在回归时代。 如果有人有任何建议我将不胜感激!

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

“LocalTime是一个不可变的日期时间对象,代表一个时间,通常被视为小时 – 秒 – 秒。”

“这个类不存储或代表日期或时区。相反,它是对挂钟上所见的当地时间的描述。”

 LocalTime user = LocalTime.parse("12:55"); LocalTime now = LocalTime.now().truncatedTo(ChronoUnit.MINUTES); if (user.equals(now)) { ... } 

编辑:回答您的评论

userTimetimeNow未更新,然后在每次迭代中,您始终比较相同的值。 结果不会改变。 你需要在里面更新timeNow

无论如何,我不能想到while (true)作为一个好主意。 我不知道你需要实现什么,但是如果你想等到达到用户时间,那么我将确定到那时剩余的时间并在这段时间内hibernate。 就像是:

 long time = Duration.between(now, user).toMillils(); Thread.sleep(time); 

如果您没有设置YEAR,MONTH,DAY,则从1970年1月1日开始。

所以基本上你需要将YEAR,MONTH,DAY设置为你喜欢的日期。

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

来自javadoc :

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

根据Tobías的说明,这是OP(*)固定代码:

 //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); 

(*)从编辑过的问题中提取,因为它不属于那里( 参见本元讨论 )