Итак, ваш вопрос «сколько времени настенных часов заняло процесс, без времени, проведенного в спящем режиме». Что ж, настенные часы легко узнать, но у вас нет шансов узнать, произошла ли спячка или нет.
Однако ...
Есливаш процесс представляет собой набор отдельных шагов, вы могли бы сделать что-то вроде следующего:
List<Duration> durations = new ArrayList<>();
for(Step step : steps) {
Instant stepStart = Instant.now();
process(step);
durations.add(Duration.between(stepStart, Instant.now()));
}
long totalMillis = durations.stream()
.mapToLong(Duration::toMillis)
.filter(ms -> ms < 1000) // Cut off limit, to disregard hibernate steps
.sum();
Это время каждого шага отдельно, и если время для шага занимает более 1 секунды, это не учитывается вОбщая. Вы также можете использовать «среднее» время для этих шагов, чтобы конечный результат был немного более реалистичным (конечно, это зависит от количества шагов, предполагаемого времени выполнения одного шага и т. Д.).
Это работает, только если есть хороший предел тому, что является «слишком большим» временем, и это дает менее точный результат. Если вы что-то делаете с BigInteger
, вполне вероятно, что шаги с большими значениями занимают больше времени, поэтому одно значение отсечения не будет работать (хотя вы можете рассмотреть какое-то динамическое значение отсечения, основанное на вводе).
Самое дешевое, простое и лучшее решение: запустить код на сервере.