Как я могу сложить 2 конкретные времена в Java, используя LocalTime?
Пример:
LocalTime time1 = LocalTime.of(12, 30);
LocalTime time2 = LocalTime.of(8, 30);
time1 + time2 // Doesn't work.
time1.plus(time2) // Doesn't work.
В результате я хочу получить сумму двух раз (12:30 + 8:30 = 21:00) в формате (часы: минуты).
Любые другие предложения?
5 ответов
Вы пытаетесь добавить два LocalTime
переменные. Это неверно как концепция. Ваше время2 не должно быть LocalTime
, это должно быть Duration
, Продолжительность, добавленная к времени, дает вам другое время. Время, вычтенное из времени, дает вам продолжительность. Это все красиво и логично. Добавлять два раза вместе нельзя.
При некотором взломе возможно преобразовать ваше время в длительность, но я настоятельно рекомендую против этого. Вместо этого реструктурируйте свой код так, чтобы time2 был Duration
на первом месте.
Вы можете сделать следующее...
LocalTime t1 = LocalTime.of(9, 0); // 09:00
LocalTime t2 = LocalTime.of(2, 30); // 02:30
LocalTime total = t1.plusHours(t2.getHour())
.plusMinutes(t2.getMinute()); // 11:30
Ответ Майка Накиса не соответствует действительности.
Приведенное выше мое предложение не соответствует действительности. Я проверил, и только Java 8 имеет LocalTime.of
поэтому ответ Майка Накиса совершенно правдив. Пожалуйста, посмотрите его ответ.
[Этот раздел по-прежнему держать. в случае LocalTime
в библиотеке йода]
Я объясню:
Продолжительность в Joda-Time представляет собой продолжительность времени, измеренную в миллисекундах. Продолжительность часто получается из интервала. то есть мы можем вычесть начало из конца интервала, чтобы получить длительность.
Период в Joda-Time представляет период времени, определенный в терминах полей, например, 3 года, 5 месяцев, 2 дня и 7 часов. Это отличается от продолжительности тем, что оно неточно с точки зрения миллисекунд. Период может быть разрешен только до точного количества миллисекунд, указав момент (включая хронологию и часовой пояс), к которому он относится. Например, рассмотрим период в 1 год, если мы добавим это к 1 января, мы всегда прибудем к следующему 1 января, но продолжительность будет зависеть от того, является ли промежуточный год високосным или нет.
LocalTime
неизменный класс времени, представляющий время без часового пояса. Итак, исходя из приведенного выше определения, период подходит для вас, добавляя время к LocalTime
, На самом деле API доказал это:
LocalTime localTime = new LocalTime(10, 30);
Duration d = new Duration(1, 0);
Period p = new Period(1, 0);
LocalTime newLocalTime = localTime.plus(d); // COMPILE ERROR
LocalTime newLocalTime = localTime.plus(p); // SUCCESS
Вы можете использовать метод sum()
LocalTime time1 = LocalTime.of(12, 30);
LocalTime time2 = LocalTime.of(8, 30);
Integer hour1 = time1.getHour();
Integer hour2 = time2.getHour();
Integer minute1 = time1.getMinute();
Integer minute2 = time2.getMinute();
Integer first = Integer.sum(hour1,hour2);
Integer second = Integer.sum(minute1,minute2);
System.out.println("The time is "+ first + " : " + second);
Должно работать
LocalTime t1 = LocalTime.parse('03:33:24')
LocalTime t2 = LocalTime.parse('03:13:41')
t1.plusHours(t2.hour)
.plusMinutes(t2.minute)
.plusSeconds(t2.second)
.plusNanos(t2.nano)