控制台时间刷新

Time refresh in the console

我试图对日期和时间进行编程,使其与当前日期相对应,但在控制台中找不到解决方案,只显示最后一个 运行 的日期。这是我的代码:

public class DateDemo {

    public static void main(String args[]) {
        Date dNow = new Date();
        SimpleDateFormat ft = new SimpleDateFormat("E dd.MM.yyyy 'um' HH:mm:ss ");
        System.out.println("Datum: " + ft.format(dNow));
    }
}

控制台的行为不同,所以恐怕没有任何通用的解决方案。

我试过这个:

    DateTimeFormatter formatter
            = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)
                    .withLocale(Locale.GERMAN);
    ZoneId timeZoneId = ZoneId.of("Europe/Zurich");
    int totalIterations = Math.toIntExact(TimeUnit.HOURS.toSeconds(2));
    for (int sec = 0; sec < totalIterations; sec++) {
        System.out.print(ZonedDateTime.now(timeZoneId).format(formatter) + '\r');
        TimeUnit.SECONDS.sleep(1);
    }

当我在 Eclipse 中 运行 它时,它会在 Eclipse 控制台中打印一行,如下所示:

16. November 2019 07:37:32 MEZ
16. November 2019 07:37:33 MEZ
16. November 2019 07:37:34 MEZ
16. November 2019 07:37:35 MEZ

但是当我从我的 Mac 终端 window 运行 它时,它保持在同一行并不断覆盖它:

\r字符是马车return。理论上它应该回到同一行的开头。也许它不在 Eclipse 中的原因是他们认为我想使用控制台 window 进行调试,因此如果我能看到所有输出会更好,所以他们不想覆盖任何。只是猜测。

有更优雅、更准确的方法让事情每秒都发生。查看 ScheduledExecutorService.scheduleAtFixedRate.

PS 两个屏幕截图的格式略有不同,在终端中 window um (“at”) 包含在日期和时间之间。差异来自不同的 Java 版本。在 Eclipse 中我使用 Java 8,在终端中使用 window Java 11。故事在这个问题中:.