控制台的行为有所不同,因此恐怕没有通用的解决方案。
我尝试过:
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上的“终端”窗口中运行它时,它停留在同一行上并不断覆盖它:
\r
字符是回车符。从理论上讲,它应该回到同一行的开头。也许它之所以不在Eclipse中,是因为他们认为我想使用控制台窗口进行调试,因此,如果我可以看到所有输出,则可以更好地使用它,因此他们不想覆盖任何输出。只是猜测。
有更优雅,更准确的方法可以使每秒发生的事情。查看ScheduledExecutorService.scheduleAtFixedRate
。
PS这两种截屏的格式略有不同,在日期和时间之间包括了终端窗口um
(“ at”)。区别来自不同的Java版本。在Eclipse中,我在终端窗口Java 11中使用了Java8。问题在这个问题中:JDK dateformatter parsing DayOfWeek in German locale,java8 vs java9。
本文链接:https://www.f2er.com/3101678.html