The Concept of Date and Time in Java-8
source link: https://blog.knoldus.com/the-concept-of-date-and-time-in-java-8/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
The Concept of Date and Time in Java-8
Reading Time: 3 minutes
Hi guys, Let’s discuss the concept of Date and Time in Java 8. Well, it was already there then why again in java 8? That is because previously we have many issues in working. So, there are many improvements in java 8 which we will see here.
Advantages over old Date-Time API
First, we see how the new API is better than the older one:
Thread Safety:
Since old date-time was not thread-safe. So we have to deal with concurrency issues while using date and to write additional code to handle thread-safety. So in Java 8 date and time are immutable and thread-safe, thus taking that concurrency headache away from us.
Poor Designing:
It had no uniformity. As default Date starts from 1900, the month starts from 1, and the day starts from 0. It had inadequate methods to perform day-to-day operations and there were fewer operations present. The new date-time API is ISO centric and follows consistent domain models for time, dates, duration, and periods and there is a wide variety of utility methods for such operations.
Zone Handling:
We had to write a lot of code to handle the zoning issue. But in new API handling of timezone can be done with Local and ZonedDate APIs.
Let’s perform some basic hands-on:
Current Date-Time
We can have handle Date and Time in 3 ways:
– LocalDate: LocalDate represents a date in ISO format (yyyy-mm-dd) without time.
– LocalTime: LocalTime represents time without a date.
– LocalDateTime: LocalDateTime is used to represent a combination of date and time.
//current date
LocalDate today = LocalDate.now();
System.out.println("Today's date is "+ date);
//current time
LocalTime currentTime = LocalTime.now();
System.out.println("Current time is "+ time);
//current time and date
LocalDateTime currentDate = LocalDateTime.now();
System.out.println("date and time : "+ current);
//a particular format
DateTimeFormatter newFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
String formatedDate = currentDate.format(newFormat);
System.out.println("Foramatted Date "+ formatedDate);
//some specified date
LocalDate birthday = LocalDate.of(1998,5,26);
System.out.println("My Birthday is :"+birthday);
Output:
Today's date is 2020-06-17
Current time is 06:21:10.409
date and time : 2020-06-17T06:21:10.410
Foramatted Date 17-06-2020 06:21:10
Month : APRIL day : 9 seconds : 10
My Birthday is :1998-05-26
Zoned Date-Time
This is really usefulwhen we need to deal with timezone specific dates and times.
Following zone ids are present:
- Australia/Darwin
- Australia/Sydney
- America/Argentina/Buenos_Aires
- Africa/Cairo
- America/Anchorage
- America/Sao_Paulo
- Asia/Dhaka
- Africa/Harare
- America/St_Johns
- America/Chicago
- Asia/Shanghai
- Africa/Addis_Ababa
- Europe/Paris
- America/Indiana/Indianapolis
- Asia/Kolkata
- Asia/Tokyo
- Pacific/Apia
- Asia/Yerevan
- Pacific/Auckland
- Asia/Karachi
- America/Phoenix
- America/Puerto_Rico
- America/Los_Angeles
- Pacific/Guadalcanal
- Asia/Ho_Chi_Minh
// to get the current zone
ZonedDateTime currentZone = ZonedDateTime.now();
System.out.println("the current zone is "+ currentZone.getZone());
// getting time zone of specific place
ZoneId kolkata = ZoneId.of("Asia/Kolkata");
ZonedDateTime kolkataZone = currentZone.withZoneSameInstant(kolkata);
System.out.println("kolkata time zone is " + kolkataZone);
//formatting time zone of specific place
DateTimeFormatter format = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
String formatedDateTime = kolkataZone.format(format);
System.out.println("formatted kolkata time zone "+ formatedDateTime);
Output:
the current zone is Asia/Kolkata
kolkata time zone is 2020-06-17T19:01:03.259099+05:30[Asia/Kolkata]
formatted kolkata time zone 17-06-2020 19:01:03
Periodand Duration
Period: Period is most suitable when we have to deal with Dates.
Duration: Duration is most suitable when we have to deal with Time.
LocalDate today = LocalDate.now();
LocalDate date = LocalDate.of(2020, Month.DECEMBER, 12);
Period period = Period.between(date, today);
System.out.println("period between dates is a period of "+period);
LocalTime now = LocalTime.now();
System.out.println("the current time is " + now);
Duration twoHours = Duration.ofHours(2);
// adding two hours to the current-time and storing it in later
LocalTime later = now.plus(twoHours);
System.out.println("after adding two hours of duration " + later);
Duration duration = Duration.between(later, now);
System.out.println("duration between now & later is " + duration);
Output:
period between dates is a period of P-5M-25D
the current time is 19:16:44.643179
after adding two hours of duration 21:16:44.643179
duration between now & later is PT-2H
Chrono Units Enum
Chrono Units Enum is added in Java 8 to replace integer values used in old API to represent days, month, etc.
//add 1 hour to the current time
LocalTime nextHour = now.plus(1,ChronoUnit.HOURS);
System.out.println("Next hour: " + nextHour);
//add 1 week to the current date
LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
System.out.println("Next week: " + nextWeek);
//add 1 month to the current date
LocalDate nextMonth = today.plus(1, ChronoUnit.MONTHS);
System.out.println("Next month: " + nextMonth);
//add 10 year to the current date
LocalDate nextYear = today.plus(10, ChronoUnit.YEARS);
System.out.println("Tenth year: " + nextYear);
Output:
Next hour: 20:34:38.675949
Next week: 2020-06-24
Next month: 2020-07-17
Tenth year: 2030-06-17
References
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK