1

我正在尝试制作一个倒数计时器,该计时器将每周重置(东部时间星期一上午 10 点)。我找到了类似于我正在寻找的东西,但它不会自行重置;它变成了负面的。有人可以帮我解决这个问题吗?

public static int SECONDS_IN_A_DAY = 24 * 60 * 60;

public String main(String[] args) {

    Calendar now = Calendar.getInstance();
    int year  = now.get(Calendar.YEAR);
    int month = now.get(Calendar.MONTH);

    Calendar reset = Calendar.getInstance();
    reset.setTime(new Date(0)); 
    reset.set(Calendar.DAY_OF_WEEK, 1); //2
    reset.set(Calendar.MONTH, month);
    reset.set(Calendar.YEAR, year);
    reset.set(Calendar.HOUR_OF_DAY, 0); //10
    reset.set(Calendar.MINUTE, 33);

    Calendar today = Calendar.getInstance();
    long diff =  reset.getTimeInMillis() - today.getTimeInMillis(); 
    long diffSec = diff / 1000;

    long days = diffSec / SECONDS_IN_A_DAY;
    long secondsDay = diffSec % SECONDS_IN_A_DAY;
    long seconds = secondsDay % 60;
    long minutes = (secondsDay / 60) % 60;
    long hours = (secondsDay / 3600);

    if (diff < 0) {
        reset.setTime(new Date(0)); 
        reset.set(Calendar.DAY_OF_WEEK, 1); //2
        reset.set(Calendar.MONTH, month);
        reset.set(Calendar.YEAR, year);
        reset.set(Calendar.HOUR_OF_DAY, 0); //10
        reset.set(Calendar.MINUTE, 33);
    }

    return "Reset in: " + days + " days, " + hours + " hours, " + minutes + " minutes, and " + seconds + " seconds.";
}

public void onMessageReceived(MessageReceivedEvent e) {

    if(e.getMessage().getRawContent().equalsIgnoreCase(";reset")) {
        e.getChannel().sendMessage(main(null)).queue();
    }
}    

一旦达到重置时间,我无法弄清楚如何进行重置。非常感谢任何帮助。我已经 5 年多没有编码了。

如果时间已经过去,下面是输出的屏幕截图。

https://puu.sh/w3odJ/009663b380.png

谢谢!

更新:我发现最好的方法是reset.add在日历中添加 7 天reset。不过,目前还无法满足实现这一目标的适当条件。我已经尝试reset.compareTo(today)过以及其他一些不起作用的组合,但这是进步。

4

0 回答 0