测量从起始点到当前时间、一天结束或终点的时间跨度



我想写两个方法,它们都依赖于一天中剩下多少时间的信息(距离一天结束还有多少秒,以及一天已经过去了多少百分比)。不同的日子有不同的时间跨度(有时只是)秒,有时是小时,所以对我来说,仅仅计算24 * 60 * 60并减去sinceMidnight()的结果是行不通的。我试着在当前时间上加一天,但直到现在我都失败了。

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Calendar;
public class TimesOfSeconds {
public static void sinceMidnight(int intHours, int intMinutes, int intSeconds) {
int hoursInSeconds = intHours * 60 * 60;
int minutesInSeconds = intMinutes * 60;
int secondsSinceMidnight = hoursInSeconds + minutesInSeconds + intSeconds;
System.out.println(secondsSinceMidnight + " Seconds since Midnight!");
}
public static void tillEndOfDay() {
}
public static void percentOfDayPassed() {
}
public static void getTheTimeRight(int intHours, int intMinutes, int intSeconds) {
System.out.println(intHours + " " + intMinutes + " " + intSeconds);
}
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
SimpleDateFormat justHours = new SimpleDateFormat("HH");
int intHours = Integer.parseInt(justHours.format(cal.getTime()));
SimpleDateFormat justMinutes = new SimpleDateFormat("mm");
int intMinutes = Integer.parseInt(justMinutes.format(cal.getTime()));
SimpleDateFormat justSeconds = new SimpleDateFormat("ss");
int intSeconds = Integer.parseInt(justSeconds.format(cal.getTime()));
getTheTimeRight(intHours, intMinutes, intSeconds);
sinceMidnight(intHours, intMinutes, intSeconds);
}
}

我不确定

不同的日子有不同的跨度(有时只是)秒,有时是小时,所以它不会为我工作,只是计数24 * 60 * 60和减去sinceMidnight()的结果。

也许你说的是一些工作日?

无论如何-为了计算持续时间,周期,java。时间有很好的工具来帮你算算。

LocalDateTime todayMidnight = LocalDate.now().atStartOfDay();
Duration since = Duration.between(todayMidnight, LocalDateTime.now());
long sinceMidnight = since.getSeconds();
System.out.println(sinceMidnight + " Seconds since Midnight!");
LocalDateTime endOfTheDay = LocalDate.now().plusDays(1).atStartOfDay();
Duration till = Duration.between(LocalDateTime.now(), endOfTheDay);
long tillEndOfDay = till.getSeconds();
System.out.println(tillEndOfDay + " Seconds till end of the day");
long percentOfDayPassed = since.getSeconds() * 100 / (60*60*24);
System.out.println("percentOfDayPassed: " + percentOfDayPassed + "%");

在这里你可以找到更多的例子,并调整到您的需要

我建议您使用java。time,现代Java日期和时间API,用于您的时间工作。我想你的意思是说一天可以是23、24或25小时,或者其他长度。要考虑到这一点,请使用具有正确时区的ZonedDateTime,因为该类知道此类异常。

ZoneId zone = ZoneId.systemDefault();

ZonedDateTime timeNow = ZonedDateTime.now(zone);
System.out.println("Time now:                 " + timeNow.toLocalTime());

LocalDate today = timeNow.toLocalDate();
ZonedDateTime startOfDay = today.atStartOfDay(zone);
System.out.println("Seconds since midnight:   "
+ ChronoUnit.SECONDS.between(startOfDay, timeNow));

ZonedDateTime endOfDay = today.plusDays(1).atStartOfDay(zone);
System.out.println("Seconds until midnight:   "
+ ChronoUnit.SECONDS.between(timeNow, endOfDay));

long nanosOfDayPassed = ChronoUnit.NANOS.between(startOfDay, timeNow);
long dayLengthNanos = ChronoUnit.NANOS.between(startOfDay, endOfDay);
double percentagePassed = 100.0 * nanosOfDayPassed / dayLengthNanos;
System.out.format("Percentage of day passed: %f %%%n", percentagePassed);

刚才运行时的输出:

Time now:                 19:17:38.994190
Seconds since midnight:   69458
Seconds until midnight:   16941
Percentage of day passed: 80,392354 %

我让你把代码包装在很好的方法中,就像你在问题中做的那样。

链接Oracle tutorial: Date Time using java.time.

最新更新