所以我正在尝试使System.currentTimeMillis();一个常数。这很难解释。代码应该执行的操作是向System.currentTimeMillis();添加一个值。并等待代码返回true,然后执行操作。所以基本上,我正在尝试建立一个“临时禁令”系统。因为System.currentTimeMillis不是常数,所以这将返回false。我想知道如何使该代码成为真实

long timeleft = StaticMaps.muteMap.get(uuid).getTime() * 1000; //seconds to miliseconds
if (System.currentTimeMillis() >= timeleft + System.currentTimeMillis()) {
    plugin.mutemanager.destructPlayerMute(uuid, "Expired", "Removed by Console, Expired!");

} else {
    KTools.notify("debug");
    e.setCancelled(true);
}

解决方案我使用了
使用System.currentTimeMillis();将值存储为“Long”。
所以您要做的是。
Map<UUID, Long> temp = new HashMap<>();
Long time = 3 * 1000; //3 * 1000 = 3 Seconds
temp.put(Identifier, System.currentTimeMillis() + timetoadd)

添加时间需要很长。

然后检查System.currentTimeMillis()是否> =哈希图中的值。
  long HOUR = 3600000;
  long DAY = 86400000;
  long dayformula = Long.parseLong(parts[0]) * DAY;
  long hourformula = Long.parseLong(parts[1]) * HOUR;
  long totalmiliseconds = dayformula + hourformula;

最佳答案

您不想将其变成常量。您想在给定的时间内存储其值,然后使用该值对照当前系统时间进行检查。

这样很容易实现:

long timeleft = StaticMaps.muteMap.get(uuid).getTime() * 1000; //seconds to miliseconds
long lastCheckedTime = System.currentTimeMillis();
if (System.currentTimeMillis() >= timeleft + lastCheckedTime) {
    plugin.mutemanager.destructPlayerMute(uuid, "Expired", "Removed by Console, Expired!");

} else {
    KTools.notify("debug");
    e.setCancelled(true);
}

...虽然很公平,但除非false处于微秒级别,否则几乎可以保证该语句为timeLeft

10-08 14:23