В последнее время я пытаюсь портировать одну из наших старых кодовых баз, от Calendar
до java.time
, поскольку нам нужен целый ряд арифметических функций, которые можно найти только в java.time
.
Если мы используем Calendar
в нашей текущей кодовой базе, нам нужно выполнить много преобразований туда-сюда (с Calendar
до Instant
, с Instant
обратно до Calendar
), в серединенаш код.
Чтобы избежать такого громоздкого преобразования, мы решили исключить использование Calendar
и перенести их на эквивалентный java.time
код.
Янемного скептически по поводу моего порта.По сравнению с кодом календаря
- создает больше временных экземпляров объектов в цикле while.
- Требуется больше операторов кода.
Код календаря
// reminderCal is Calendar object.
long startTimestamp = getStartTimestamp();
reminderCal.setTimeInMillis(startTimestamp);
while (startTimestamp <= maxTimestamp) {
resultList.add(startTimestamp);
reminderCal.add(Calendar.DAY_OF_MONTH, 1);
startTimestamp = reminderCal.getTimeInMillis();
}
return resultList;
java.time code
// Epoch timestamp loopTs as initial input.
long startTimestamp = getStartTimestamp();
final ZoneId zoneId = ZoneId.systemDefault();
while (startTimestamp <= maxTimestamp) {
resultList.add(startTimestamp);
// More code, more temporary instances required compared
// with Calendar's version. Not sure we're doing the right
// way.
Instant instant = Instant.ofEpochMilli(startTimestamp);
LocalDateTime time = LocalDateTime.ofInstant(instant, zoneId);
time = time.plus(1, ChronoUnit.DAYS);
startTimestamp = time.atZone(zoneId).toInstant().toEpochMilli();
}
return resultList;
Для приведенного выше кода мне было интересно, правильно ли мы делаем порт и оптимизировали его?Есть ли какая-нибудь комната, которую мы можем улучшить в нашем порту java.time
?