Java对数时钟给出了不准确的答案

时间:2013-07-31 08:07:00

标签: java swing time jlabel clock

好的,所以我正在构建一个时钟,它会以Log 10 (小时)的形式发出时间,也会以相同的格式给出分钟和秒,但是当这个时候我一直得到奇怪的输出运行。我主要是NANs,有时是无穷大(或者是负面的)。我觉得我正在使用的数字有问题(比如它们太大或类似的东西)注意:currentTime是一个长日历,日历是日历,小时,分钟和秒是双打。时钟变量也是JLabel。程序经过两次迭代后,它总是切换到NAN。

this.timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                new SwingWorker<Void, Void>() {
                    @Override
                    protected Void doInBackground() throws Exception {
                        currentTime = System.currentTimeMillis();
                        calendar.setTime(new Date(currentTime));
                        hour = Math.log10(hour);
                        minute = Math.log10(minute);
                        second = Math.log10(second);
                        System.out.println(hour + " " + minute + " " + second);
                        return null;
                    }

                    @Override
                    protected void done() {

                        clock.setText("<html><body><p>Log Time: "
                                + "Log<sub>10</sub>(" + hour + ") || "
                                + "Log<sub>10</sub>(" + minute + ") || "
                                + "Log<sub>10</sub>(" + second + ")</p></body></html>");
                    }
                }.execute();
            }
        }, 0, 200);

Pic1 Pic2

1 个答案:

答案 0 :(得分:2)

这段代码没有多大意义:

currentTime = System.currentTimeMillis();
calendar.setTime(new Date(currentTime));
hour = Math.log10(hour);
minute = Math.log10(minute);
second = Math.log10(second);

您在calendar设置时间 - 但完全忽略它。我希望你能想要这样的东西:

currentTime = System.currentTimeMillis();
calendar.setTime(new Date(currentTime));
hour = Math.log10(calendar.get(Calendar.HOUR_OF_DAY));
minute = Math.log10(calendar.get(Calendar.MINUTE));
second = Math.log10(calendar.get(Calendar.SECOND));

编辑:正如评论中所指出的那样,你还需要考虑当小时,分钟或秒为0时你会做什么。(很不清楚为什么你想要使用日志以诚为本的时钟开始。)