Фактическая проблема с вашим кодом заключается в том, что вы выполняете целочисленное деление.Я предполагаю, что и hour
, и min
определены как целочисленные типы.Формула (hour * 3600 + min * 60) / 24
всегда дает целочисленный тип.Если вы измените код на (hour * 3600 + min * 60) / 24d
, выражение даст по крайней мере значение с плавающей запятой.
Следующая проблема в том, что Calendar.add(int field, int amount)
принимает только целое число в качестве второго аргумента.Конечно, если вы передаете Calendar.SECOND
в качестве первого аргумента, то ваша точность не превышает секунды.Вы можете использовать Calendar.MILLISECOND
для получения более высокой точности.
Однако я предлагаю использовать новый Java Date and Time API вместо хлопотливого старого API:
LocalTime startTime = LocalTime.of(0, 0);
LocalTime endTime = LocalTime.of(11, 51);
long span = Duration.between(startTime, endTime).toNanos();
final int n = 23; // Number of pieces
LongStream.rangeClosed(0, n)
.map(i -> i * span / n)
.mapToObj(i -> startTime.plusNanos(i))
.forEach(System.out::println);