【问题标题】:Can localTime be added by 1 second continually in java.sql.Time?java.sql.Time中localTime可以连续加1秒吗?
【发布时间】:2020-04-09 22:58:59
【问题描述】:

java.time.LocalTime 中,有addSeconds() 方法。 可以连续加1秒吗?

LocalTime localTime = Time.valueOf("00:00:00").toLocalTime();
localTime = localTime.plusSeconds(1L);
String output = localTime.toString();
whiteTime = Time.valueOf(output);

我从 Intellij 添加了这部分错误消息。

00:00:58
respond to action of white: Black Time
00:00:59
respond to action of white: Black Time
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException
    at java.sql/java.sql.Time.valueOf(Time.java:109)
    at ui.TimerPanel.blackTimerTikTok(TimerPanel.java:71)
    at util.GameModel$2.actionPerformed(GameModel.java:87)
    at java.desktop/javax.swing.Timer.fireActionPerformed(Timer.java:317)
    at java.desktop/javax.swing.Timer$DoPostEvent.run(Timer.java:249)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

它看起来在到达00:00:59 时出错。如何让00:01:00连续数秒?

【问题讨论】:

  • 请澄清您所说的“看起来它在到达 00:00:59 时出错”是什么意思。会发生什么,您有什么期待?
  • String output = localTime.format(DateTimeFormatter.ofPattern("HH:mm:ss")); 代替String output = localTime.toString(); 怎么样?
  • @KarolDowbecki 我觉得是java.sql.Time 因为问题的标题......
  • @Jon Skeet:当我运行相关程序并到达 00:00:59 时,它会在 intellij IDEA、java 中显示一长串错误消息。我没有仔细检查错误信息,因为我无法理解。我只是明白它不起作用。如果需要,我会添加错误信息。
  • 是的,您应该始终将错误添加到问题中。 “它不起作用”几乎不如“由于这些错误而失败 [..],我不明白。”

标签: java time localtime


【解决方案1】:

问题在于您使用的是java.sql.Time.valueOf(String) 并依赖于LocalTime.toString() 格式,该格式可能无法打印秒数,因为:

所使用的格式将是最短的输出时间的完整值,其中省略的部分被暗示为零。

你应该使用Time.valueOf(LocalTime):

LocalTime localTime = Time.valueOf("00:00:59").toLocalTime();
localTime = localTime.plusSeconds(1);
System.out.println(Time.valueOf(localTime)); // 00:01:00

【讨论】:

  • 因为 Ole 提到 Time 已被弃用,是否有另一个类用于在 LocalTime 中设置和打印“00:00:00”?也就是说,不使用Time.valueOf()可以改变上面的代码吗?
  • LocalTime.of(0, 0, 0)
【解决方案2】:

要补充@Karol Dowbecki 的回答,如果您需要使用LocalTime 的字符串表示,您可以使用DateTimeFormatter 来保持格式一致:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");

String output = localTime.format(formatter);
whiteTime = Time.valueOf(output);

这将在时间滚动时输出00:01:00 而不会给你错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    相关资源
    最近更新 更多