[英]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)) { ... }
编辑:回答您的评论
userTime
和timeNow
不会更新,因此在每次迭代中,您总是比较相同的值。 结果不会改变。 您需要更新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.