Сравнение даты и времени с тремя днями вперед с использованием Java-8 LocaldateTime - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть Java-приложение, в котором пользователь не может изменить заказ после определенной даты и времени. Например, пользователь не может изменить заказ после 3-го дня до 12:00, например, если заказ был размещен на9 ноября пользователь не сможет изменить oder после 12 ноября, 12:00. Дата динамическая, но время очень статическое.

Я пытался использовать приведенную ниже логику для вычисленияэто и я не могу понять, как извлечь текущее время из LocalDateTime.now () для сравнения.

final LocalDate orderDate  =orderData.getOrderDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
final LocalDate currentDate = LocalDate.now();
final LocalDateTime currentDateTime = LocalDateTime.now();
final LocalDate orderCancellationCutOffDate = 
orderDate.minusDays(orderCancellationCutOffDays);

if (currentDate.equals(orderCancellationCutOffDays) && 
currentDateTime.isBefore(<12:00 PM>)){

<Business rule>
    }   

Может кто-нибудь помочь мне с эффективным способом сделать это сравнение.

Ответы [ 2 ]

2 голосов
/ 09 ноября 2019

Только если вы точно знаете, что ваша программа никогда не будет использоваться за пределами вашего часового пояса, безопасно ли использовать LocalDateTime. Я рекомендую вам использовать ZonedDateTime на всякий случай.

В любом случае, используя это LocalDateTime, код вашей логики, как я понял, это:

final int orderCancellationCutOffDays = 3;
final LocalTime orderCancellationCutOffTime = LocalTime.of(12, 0);

LocalDate orderDate = LocalDate.of(2019, Month.NOVEMBER, 6);
LocalDateTime orderCancellationCutOffDateTime
        = orderDate.plusDays(orderCancellationCutOffDays)
                .atTime(orderCancellationCutOffTime);
final LocalDateTime currentDateTime = LocalDateTime.now(ZoneId.of("America/Punta_Arenas"));
if (currentDateTime.isAfter(orderCancellationCutOffDateTime)) {
    System.out.println("This order can no longer be modified.");
} else {
    System.out.println("You can still modify this order,");
}

Конечно, замените свой часовой пояс, куда я положил America/Punta_Arenas.

1 голос
/ 09 ноября 2019

Предположим, если у вас есть дата oder в LocalDate как сегодня

LocalDate orderDate //2019-11-09

Теперь создайте дату крайнего срока, добавив к ней 3 дней

LocalDateTime deadLineDate =orderDate.plusDays(3).atStartOfDay(); //2019-11-12T00:00

Даже если выЕсли вы хотите определенное время, вы можете использовать atTime методы

LocalDateTime deadLineDate =orderDate.plusDays(3).atTime(12,0);

Так что, если currentDateTime раньше, чем deadLineDate клиент может изменить заказ

if(currentDateTime.isBefore(deadLineDate)) {
    // can modify the order

    }
else {
   //user can not modify the order
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...