我试图将格式为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
目前的时间显然还不错,但是对于用户定义的时间,他一直在回归时代。如果有人有任何建议我会很感激!
答案 0 :(得分:2)
如果您只想比较时间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);
答案 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)