Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting current time in Java 8

I am exploring the new java.time API of Java 8. I am particularly trying to retrieve the current time (my current time zone, of a different time zone, and of a different offset).

The code is:

public static void getCurrentLocalTime(){
    LocalTime time = LocalTime.now();
    System.out.println("Local Time Zone: "+ZoneId.systemDefault().toString());
    System.out.println("Current local time : " + time);
}

public static void getCurrentTimeWithTimeZone(){
    LocalDateTime localtDateAndTime = LocalDateTime.now();
    ZoneId zoneId = ZoneId.of("America/Los_Angeles");
    ZonedDateTime dateAndTimeInLA  = ZonedDateTime.of(localtDateAndTime, zoneId);
    String currentTimewithTimeZone =dateAndTimeInLA.getHour()+":"+dateAndTimeInLA.getMinute();
    System.out.println("Current time in Los Angeles: " + currentTimewithTimeZone);
}

public static void getCurrentTimeWithZoneOffset(){
    LocalTime localtTime = LocalTime.now();
    ZoneOffset offset = ZoneOffset.of("-08:00");
    OffsetTime  offsetTime  = OffsetTime.of(localtTime, offset);
    String currentTimewithZoneOffset =offsetTime.getHour()+":"+offsetTime.getMinute();
    System.out.println("Current time  with offset -08:00: " + currentTimewithZoneOffset);
}

But, when I call the methods I get the same time-of-day (my system time), which is obviously not what I am expecting.

The output of the method calls:

Current time in Los Angeles: 19:59
Local Time Zone: Asia/Calcutta
Current local time : 19:59:20.477
Current time  with offset -08:00: 19:59

Even after setting a different time zone and offset, why am I getting the same time?

like image 598
user2693135 Avatar asked Oct 13 '15 10:10

user2693135


People also ask

How do I get the current time in Java 8?

You can get the time from the LocaldateTime object using the toLocalTime() method. Therefore, another way to get the current time is to retrieve the current LocaldateTime object using the of() method of the same class. From this object get the time using the toLocalTime() method.

How do I get the current time in Java?

The LocalDateTime. now() method returns the instance of LocalDateTime class. If we print the instance of LocalDateTime class, it prints the current date and time. To format the current date, you can use DateTimeFormatter class which is included in JDK 1.8.

How do I get current time in LocalDateTime?

now() now() method of a LocalDateTime class used to obtain the current date-time from the system clock in the default time-zone. This method will return LocalDateTime based on system clock with default time-zone to obtain the current date-time.


1 Answers

LocalDateTime.now() always returns the current date/time in your default timezone (say 13 October @ 11.20am in London). When you create a ZonedDateTime or OffsetTime from it with a specific ZoneId or ZoneOffset, you get the same date and time but in a different time zone (for example 13 october at 11.20am in Los Angeles), which represents a different instant in time.

You are probably looking for something like:

Instant now = Instant.now();
ZoneId zoneId = ZoneId.of("America/Los_Angeles");
ZonedDateTime dateAndTimeInLA = ZonedDateTime.ofInstant(now, zoneId);

This will calculate the current date and time in Los Angeles: 13 october, 3.20am.

like image 60
assylias Avatar answered Sep 17 '22 19:09

assylias