我正在尝试制作一个倒数计时器,该计时器将每周重置(东部时间星期一上午 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)
过以及其他一些不起作用的组合,但这是进步。