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

时间:2015-09-29 09:08:59

标签: 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();
while (true){
    if (timeNow.equals(userTime)){
    System.out.println("The time equals, task is done!");
    ChangingWindow window = new ChangingWindow(chosenColor);

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

用户时间:Thu Jan 01 10:35:00 CET 1970

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

目前的时间显然还不错,但是对于用户定义的时间,他一直在回归时代。如果有人有任何建议我会很感激!

3 个答案:

答案 0 :(得分:2)

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

  

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

     

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

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

if (user.equals(now)) { ... }

编辑:回答您的评论

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

中更新while

无论如何,我无法将while (true)视为一个好主意。我不知道你需要实现什么,但如果你想等到达到用户时间,那么我将确定到那时剩余的时间并在这段时间内休眠。类似的东西:

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

答案 1 :(得分:0)

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

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

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

来自javadoc

  

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

答案 2 :(得分:0)

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

> sqrt (-1) :: Double 
    NaN    -- urgh... negative numbers don't have real roots!
> :m +Data.Complex
> sqrt (-1) :: Complex Double 
    (- 0.0) :+ 1.0

(*)从已编辑的问题中提取,因为它不属于那里(see this meta discussion