倒计时直到一天结束
Countdown until the end of the day
我很难尝试进行倒计时直到一天结束 (23:59)。
我有一个方法 returns 还剩多少时间,它 returns 是这样的:“5h 10m 1s” 没关系,问题是我想要它return我还剩多少到23:59。
我在完成操作时以毫秒为单位保存我想计算到一天结束的时间。
我有这样的东西:
public String getCountdown(UUID uuid, Quest quest) {
String countdownTimePlaceholder = "";
long questCompletedTimeMillis = plugin.getDatabaseManager().getQuestCompletedMillis(uuid, quest);
long currentTimeMillis = System.currentTimeMillis();
int hour = new Date().getHours();
int minutes = new Date().getMinutes();
int second = new Date().getSeconds();
long seconds = ((24*60*60) - ((hour*60*60) + (minutes*60) + second));
long seconds2 = seconds * 1000L;
long waitingTime = currentTimeMillis - questCompletedTimeMillis;
long waitingTimeDiv = waitingTime / 1000L;
long waitingTimeSeconds = seconds - waitingTimeDiv, waitingTimeMinutes = waitingTimeSeconds / 60L, waitingTimeHours = waitingTimeMinutes / 60L;
if (questCompletedTimeMillis + seconds2 > currentTimeMillis && questCompletedTimeMillis != 0L) {
if (waitingTimeSeconds > 59L) waitingTimeSeconds -= 60L * waitingTimeMinutes;
if (waitingTimeSeconds != 0L) countdownTimePlaceholder = waitingTimeSeconds + "s";
if (waitingTimeMinutes > 59L) waitingTimeMinutes -= 60L * waitingTimeHours;
if (waitingTimeMinutes > 0L) countdownTimePlaceholder = waitingTimeMinutes + "m " + countdownTimePlaceholder;
if (waitingTimeHours > 0L) countdownTimePlaceholder = waitingTimeHours + "h " + countdownTimePlaceholder;
return countdownTimePlaceholder;
}
return "-1";
}
你说:
until the end of the day (23:59)
以 23:59 为目标是一种有缺陷的方法。一方面,在某些时区的某些日期可能不存在该时间。另一方面,您无法涵盖一整天,而忽略了新一天开始前的整整一分钟。你不能整齐地靠着日子,因为那一分钟的差距。
相反,通常最好的方法是半开,其中开头是包含,结尾是不包含。因此,一天会持续到但不包括 下 天的开始。
捕捉您感兴趣的时区中的当前时刻。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime now = ZonedDateTime.now( z ) ;
获取明天的第一个时刻。
LocalDate tomorrow = now.toLocalDate().plusDays( 1 ) ;
ZonedDateTime tomorrowStart = tomorrow.atStartOfDay( z ) ;
计算经过的时间。
Duration d = Duration.between( now.toInstant() , tomorrowStart.toInstant() ) ;
提示:对于将时间跨度表示为一对 Instant
对象的 class,请参阅 Interval
in ThreeTen-Extra。
我很难尝试进行倒计时直到一天结束 (23:59)。
我有一个方法 returns 还剩多少时间,它 returns 是这样的:“5h 10m 1s” 没关系,问题是我想要它return我还剩多少到23:59。
我在完成操作时以毫秒为单位保存我想计算到一天结束的时间。
我有这样的东西:
public String getCountdown(UUID uuid, Quest quest) {
String countdownTimePlaceholder = "";
long questCompletedTimeMillis = plugin.getDatabaseManager().getQuestCompletedMillis(uuid, quest);
long currentTimeMillis = System.currentTimeMillis();
int hour = new Date().getHours();
int minutes = new Date().getMinutes();
int second = new Date().getSeconds();
long seconds = ((24*60*60) - ((hour*60*60) + (minutes*60) + second));
long seconds2 = seconds * 1000L;
long waitingTime = currentTimeMillis - questCompletedTimeMillis;
long waitingTimeDiv = waitingTime / 1000L;
long waitingTimeSeconds = seconds - waitingTimeDiv, waitingTimeMinutes = waitingTimeSeconds / 60L, waitingTimeHours = waitingTimeMinutes / 60L;
if (questCompletedTimeMillis + seconds2 > currentTimeMillis && questCompletedTimeMillis != 0L) {
if (waitingTimeSeconds > 59L) waitingTimeSeconds -= 60L * waitingTimeMinutes;
if (waitingTimeSeconds != 0L) countdownTimePlaceholder = waitingTimeSeconds + "s";
if (waitingTimeMinutes > 59L) waitingTimeMinutes -= 60L * waitingTimeHours;
if (waitingTimeMinutes > 0L) countdownTimePlaceholder = waitingTimeMinutes + "m " + countdownTimePlaceholder;
if (waitingTimeHours > 0L) countdownTimePlaceholder = waitingTimeHours + "h " + countdownTimePlaceholder;
return countdownTimePlaceholder;
}
return "-1";
}
你说:
until the end of the day (23:59)
以 23:59 为目标是一种有缺陷的方法。一方面,在某些时区的某些日期可能不存在该时间。另一方面,您无法涵盖一整天,而忽略了新一天开始前的整整一分钟。你不能整齐地靠着日子,因为那一分钟的差距。
相反,通常最好的方法是半开,其中开头是包含,结尾是不包含。因此,一天会持续到但不包括 下 天的开始。
捕捉您感兴趣的时区中的当前时刻。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime now = ZonedDateTime.now( z ) ;
获取明天的第一个时刻。
LocalDate tomorrow = now.toLocalDate().plusDays( 1 ) ;
ZonedDateTime tomorrowStart = tomorrow.atStartOfDay( z ) ;
计算经过的时间。
Duration d = Duration.between( now.toInstant() , tomorrowStart.toInstant() ) ;
提示:对于将时间跨度表示为一对 Instant
对象的 class,请参阅 Interval
in ThreeTen-Extra。