可以使#currentTimeMillis成为常量吗?什么时候加一个值?

时间:2015-12-25 00:16:49

标签: java

所以我试图制作System.currentTimeMillis();一个常数。很难解释这一点。代码应该做的是向System.currentTimeMillis()添加一个值;它做什么,等到代码返回true然后执行一个动作。所以基本上,我试图做一个"临时禁令"系统。因为System.currentTimeMillis不是一个常量值,当然,这将返回false。我想知道如何才能使这段代码成为现实

    #include <string>
     using namespace std;

    int main()
    {
        int X = 0;
        string zero = "touchPress 0 483 652\n";
    if {
     (X=0)
    zero>>C:\test.txt;
    x+5;
   } return 0;

我使用的解决方案 将值存储为&#34; Long&#34;使用System.currentTimeMillis()在地图内部; 所以你要做的是。

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);
}

timetoadd需要很长时间。

然后检查System.currentTimeMillis()是否是&gt; = hashmap中的值。

Map<UUID, Long> temp = new HashMap<>();
Long time = 3 * 1000; //3 * 1000 = 3 Seconds    
temp.put(Identifier, System.currentTimeMillis() + timetoadd)

2 个答案:

答案 0 :(得分:2)

你不想把它变成一个常数。您希望在给定时刻存储其值,并使用它来检查当前系统时间。

这很容易实现:

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

答案 1 :(得分:1)

你不能使System.currentTimeMillis();成为常量(var / value),因为它不是var / value,而是返回一个的函数。

您要做的是将timestamps当前时间(使用该值)加上禁止/静音时间保存到map,然后schedule 解除禁止/取消静音的,或通过定期检查System.currentTimeMillis();以及是否已超过(上方)任何预期的禁令/取消静音时间(您保存的那些),应用必要的操作(取消禁令或取消静音)。

我目前在手机上,我不能用我的(不太可靠的)记忆中的schedule方法给出一个例子......

,如果是托管版,我可以 尝试

    //How to "schedule" the lift...
    public /*static ?*/ void mutePlayer(??? uuid, long muteTime){
    StaticMaps.muteMap.put(uuid, System.currentTimeMillis()+muteTime); //I'm assuming how the syntax is...Adapt as needed.
     }

    //Somewhere else, inside a loop that runs periodically...
    for(Entry<uuid, long> scheduled : Staticamaps.muteMap.entrySet()){
    if (System.currentTimeMillis() >= scheduled.value() /*lift timestamp*/)) {
    plugin.mutemanager.destructPlayerMute(scheduled.key() /*uuid*/, "Expired", "Mute has expired!");
    } else {
    KTools.notify("debug");
    e.setCancelled(true);
    }
    }

请注意,由于我无法了解muteMap可用的语法或功能,因此我使用的部分内容应被视为pseudo-code