繁体   English   中英

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

[英]Compare user defined time and current time 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);

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

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

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

当前时间显然可以,但是在用户定义的时间里,他不断返回纪元。 如果有人有任何建议,我将不胜感激!

如果只想比较时间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);

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

因此,基本上,您需要将YEAR,MONTH,DAY设置为您喜欢的日期。

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

javadoc

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

这是遵循Tobías指示的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);

(*)摘录自已编辑的问题,因为它不属于该问题( 请参阅此元讨论

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM