Search code examples
java-8java-timehour

Java8 Adding Hours To LocalDateTime Not Working


I tried like below, but in both cases, it is showing the same time. What am I doing wrong?

LocalDateTime currentTime = LocalDateTime.now(ZoneId.of("UTC"));
Instant instant = currentTime.toInstant(ZoneOffset.UTC);
Date currentDate = Date.from(instant);
System.out.println("Current Date = " + currentDate);

currentTime.plusHours(12);
Instant instant2 = currentTime.toInstant(ZoneOffset.UTC);
Date expiryDate = Date.from(instant2);
System.out.println("After 12 Hours = " + expiryDate);

"Current Date" Time is showing the same as "After 12 Hours"...


Solution

  • The documentation of LocalDateTime specifies the instance of LocalDateTime is immutable, for example plusHours

    public LocalDateTime plusHours(long hours)

    Returns a copy of this LocalDateTime with the specified number of hours added.

    This instance is immutable and unaffected by this method call.

    Parameters:
    hours - the hours to add, may be negative
    Returns:
    a LocalDateTime based on this date-time with the hours added, not null
    Throws:
    DateTimeException - if the result exceeds the supported date range

    So, you create a new instance of LocalDateTime when you execute plus operation, you need to assign this value as follows:

    LocalDateTime nextTime = currentTime.plusHours(12);
    Instant instant2 = nextTime.toInstant(ZoneOffset.UTC);
    Date expiryDate = Date.from(instant2);
    System.out.println("After 12 Hours = " + expiryDate);
    

    I hope it can be helpful for you.