Pre-Requisite : Java Date and Time Tutorial
In this below example try to cover all possible cases and operations with date and time with Java 8+ APIs.
import java.time.DateTimeException; import java.time.Duration; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.Month; import java.time.Period; import java.time.ZoneId; import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.time.temporal.Temporal; import java.time.temporal.TemporalAdjusters; import java.time.zone.ZoneRulesException; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.TimeZone; public class Java8DateTime { public static void main(String[] args) { //LocalDate lastDay_2014 = LocalDate.of(2014, 12, 32); //LocalTime lastDay_2014 = LocalTime.of(12, 12, 23,-1); currentDateTime(); instantAPI(); GregorianCalendarAPI(); TimeZoneAPI(); dateTimeFormattingAndParsing(); localDateAPI(); localDateTimeAPI(); localTimeAPI(); System.out.println("*********Set Date and Time Manually***************"); LocalDateTime dateTimePoint=LocalDateTime.now(); // Set Date and Time manually LocalDate datePoint = LocalDate.of(2012, Month.DECEMBER, 12); System.out.println("Local Date :" + datePoint); // Days after 1970 datePoint = LocalDate.ofEpochDay(150); System.out.println("Local Date :" + datePoint); // set String LocalTime timePoint = LocalTime.parse("10:15:30"); System.out.println("Local Time :" + timePoint); // Set hours and minutes timePoint = LocalTime.of(13, 18); System.out.println("Local Time :" + timePoint); // Retrieve values System.out.println("*********Get Date and Time Values***************"); datePoint = dateTimePoint.toLocalDate(); Month month = dateTimePoint.getMonth(); int day = dateTimePoint.getDayOfMonth(); int year = dateTimePoint.getYear(); int hour = dateTimePoint.getHour(); int minute = dateTimePoint.getMinute(); int second = dateTimePoint.getSecond(); System.out.println("Local Date :" + datePoint); System.out.printf("Local Date time Format : %d/%d/%d %d:%d:%d", day, month.getValue(), year, hour, minute, second); System.out.println(); System.out.println("*********Operation On LocalDate***************"); // Operation on Local Date // Period of 1 year 3 month 2 days Period period = Period.of(1, 3, 2); LocalDate startDatePoint = datePoint.minus(period); System.out.println("Local Date :" + startDatePoint); LocalDate endDatePoint = datePoint.plus(period); System.out.println("Local Date :" + endDatePoint); System.out.println("*********Diffrence of On LocalDate***************"); // Difference of Date Period daysPeriod = Period.between(startDatePoint, endDatePoint); System.out.println("Days :" + daysPeriod.getDays()); System.out.println("Months :" + daysPeriod.getMonths()); System.out.println("Years :" + daysPeriod.getYears()); // Another Way long days = ChronoUnit.DAYS.between(startDatePoint, endDatePoint); long months = ChronoUnit.MONTHS.between(startDatePoint, endDatePoint); long years = ChronoUnit.YEARS.between(startDatePoint, endDatePoint); System.out.println("Days :" + days); System.out.println("Months :" + months); System.out.println("Years :" + years); // Duration // A duration of 3 seconds and 5 nanoseconds Duration duration = Duration.ofSeconds(3, 5); // Duration oneDay = Duration.between(Temporal., yesterday); } private static void currentDateTime() { System.out.println("*********Current Date and Time***************"); // Current Date and Time LocalDateTime dateTimePoint = LocalDateTime.now(); System.out.println("Local Date Time :" + dateTimePoint); // Current Date LocalDate datePoint = LocalDate.now(); System.out.println("Local Date :" + datePoint); // Current Time LocalTime timePoint = LocalTime.now(); System.out.println("Local Time :" + timePoint); // Get Instant from java.util.Date Instant timestamp = new Date().toInstant(); System.out.println("Current Timestamp = " + timestamp); // java.util.Calendar to Instant Instant time = Calendar.getInstance().toInstant(); System.out.println(time); } private static void instantAPI() { System.out.println("*****************Instant API*******************"); // Date to Instant Instant timestamp = new Date().toInstant(); System.out.println("Current Timestamp = " + timestamp); // Now we can convert Instant to LocalDateTime or other similar classes LocalDateTime date = LocalDateTime.ofInstant(timestamp, ZoneId.of(ZoneId.SHORT_IDS.get("PST"))); System.out.println("Date = " + date); // Calendar to Instant Instant time = Calendar.getInstance().toInstant(); System.out.println(time); // Date API to Legacy classes Date dt = Date.from(Instant.now()); System.out.println(dt); // Instant from timestamp Instant specificTime = Instant.ofEpochMilli(timestamp.toEpochMilli()); System.out.println("Specific Time = " + specificTime); // Duration example Duration thirtyDay = Duration.ofDays(30); System.out.println(thirtyDay); } private static void localDateAPI() { System.out.println("*****************Local Date API*******************"); LocalDate today = LocalDate.now(); System.out.println("Current Date=" + today); // Creating LocalDate by providing input parameters. // Here are chnaces of getting DateTimeException if pass as Invalidate // Date format LocalDate firstDay_2016 = LocalDate.of(2016, Month.JANUARY, 1); System.out.println("Specific Date=" + firstDay_2016); try { // Here with throw DateTimeException if pass as Invalidate Date // format LocalDate lastDay_2014 = LocalDate.of(2014, Month.FEBRUARY, 29); System.out.println("Specific Date=" + lastDay_2014); } catch (DateTimeException ex) { ex.printStackTrace(); } // Current date in "Asia/Kolkata", you can get it from ZoneId LocalDate todayKolkata = LocalDate.now(ZoneId.of("Asia/Kolkata")); System.out.println("Current Date in CST=" + todayKolkata); try { // Will throw java.time.zone.ZoneRulesException: Unknown time-zone ID: IST LocalDate todayIST = LocalDate.now(ZoneId.of("IST")); } catch(ZoneRulesException ex) { ex.printStackTrace(); } // Getting date from the base date i.e 01/01/1970 LocalDate dateFromBase = LocalDate.ofEpochDay(365); System.out.println("365th day from base date= " + dateFromBase); //Get 100 th day of year LocalDate hundredDay2014 = LocalDate.ofYearDay(2016, 100); System.out.println("100th day of 2014=" + hundredDay2014); //Other APIs and Operation on LocalDate // Get the Year, check if it's leap year System.out.println("Year " + today.getYear() + " is Leap Year? " + today.isLeapYear()); // Compare two LocalDate for before and after System.out.println("Today is before 01/01/2017? " + today.isBefore(LocalDate.of(2017, 1, 1))); // Get LocalDateTime from LocalDate System.out.println("Current Time=" + today.atTime(LocalTime.now())); // plus and minus operations System.out.println("20 days after today will be " + today.plusDays(20)); System.out.println("5 weeks after today will be " + today.plusWeeks(5)); System.out.println("30 months after today will be " + today.plusMonths(30)); System.out.println("20 days before today will be " + today.minusDays(20)); System.out.println("5 weeks before today will be " + today.minusWeeks(5)); System.out.println("30 months before today will be " + today.minusMonths(30)); // TemporalAdjusters for adjusting the dates LocalDate firstDayOfMonth=today.with(TemporalAdjusters.firstDayOfMonth()); System.out.println("First date of this month= " + firstDayOfMonth); LocalDate lastDayOfYear = today.with(TemporalAdjusters.lastDayOfYear()); System.out.println("Last date of this year= " + lastDayOfYear); Period period = today.until(lastDayOfYear); System.out.println("Period Format= " + period); System.out.println("Months remaining in the year= " + period.getMonths()); } private static void localTimeAPI() { System.out.println("*****************Local Time API*******************"); // Current Time LocalTime time = LocalTime.now(); System.out.println("Current Time=" + time); // Creating LocalTime by providing input arguments LocalTime specificTime = LocalTime.of(12, 20, 25, 40); System.out.println("Specific Time of Day=" + specificTime); // Try creating time by providing invalid inputs // LocalTime invalidTime = LocalTime.of(25,20); // Exception in thread "main" java.time.DateTimeException: // Invalid value for HourOfDay (valid values 0 - 23): 25 // Current date in "Asia/Kolkata", you can get it from ZoneId javadoc LocalTime timeKolkata = LocalTime.now(ZoneId.of("Asia/Kolkata")); System.out.println("Current Time in IST=" + timeKolkata); // java.time.zone.ZoneRulesException: Unknown time-zone ID: IST // LocalTime todayIST = LocalTime.now(ZoneId.of("IST")); // Getting date from the base date i.e 01/01/1970 LocalTime specificSecondTime = LocalTime.ofSecondOfDay(10000); System.out.println("10000th second time= " + specificSecondTime); } private static void localDateTimeAPI() { System.out.println("*****************Local Date Time API*******************"); // Current Date LocalDateTime today = LocalDateTime.now(); System.out.println("Current DateTime=" + today); // Current Date using LocalDate and LocalTime today = LocalDateTime.of(LocalDate.now(), LocalTime.now()); System.out.println("Current DateTime=" + today); // Creating LocalDateTime by providing input arguments LocalDateTime specificDate = LocalDateTime.of(2014, Month.JANUARY, 1, 10, 10, 30); System.out.println("Specific Date=" + specificDate); // Try creating date by providing invalid inputs // LocalDateTime feb29_2014 = LocalDateTime.of(2014, Month.FEBRUARY, 28, // 25,1,1); // Exception in thread "main" java.time.DateTimeException: // Invalid value for HourOfDay (valid values 0 - 23): 25 // Current date in "Asia/Kolkata", you can get it from ZoneId javadoc LocalDateTime todayKolkata = LocalDateTime.now(ZoneId.of("Asia/Kolkata")); System.out.println("Current Date in IST=" + todayKolkata); // java.time.zone.ZoneRulesException: Unknown time-zone ID: IST // LocalDateTime todayIST = LocalDateTime.now(ZoneId.of("IST")); // Getting date from the base date i.e 01/01/1970 LocalDateTime dateFromBase = LocalDateTime.ofEpochSecond(10000, 0, ZoneOffset.UTC); System.out.println("10000th second time from 01/01/1970= " + dateFromBase); } private static void dateTimeFormattingAndParsing() { System.out.println("*****************Local DateTime Formatting API*******************"); // Format examples LocalDate date = LocalDate.now(); // default format System.out.println("Default format of LocalDate=" + date); // specific format System.out.println(date.format(DateTimeFormatter.ofPattern("d::MMM::uuuu"))); System.out.println(date.format(DateTimeFormatter.BASIC_ISO_DATE)); LocalDateTime dateTime = LocalDateTime.now(); // default format System.out.println("Default format of LocalDateTime=" + dateTime); // specific format System.out.println(dateTime.format(DateTimeFormatter.ofPattern("d::MMM::uuuu HH::mm::ss"))); System.out.println(dateTime.format(DateTimeFormatter.BASIC_ISO_DATE)); Instant timestamp = Instant.now(); // default format System.out.println("Default format of Instant=" + timestamp); // Parse examples LocalDateTime dt = LocalDateTime.parse("27::Apr::2014 21::39::48", DateTimeFormatter.ofPattern("d::MMM::uuuu HH::mm::ss")); System.out.println("Default format after parsing = " + dt); } private static void GregorianCalendarAPI() { System.out.println("*****************Gregorian Calendar API*******************"); // ZonedDateTime from specific Calendar ZonedDateTime gregorianCalendarDateTime = new GregorianCalendar().toZonedDateTime(); System.out.println(gregorianCalendarDateTime); GregorianCalendar gc = GregorianCalendar.from(gregorianCalendarDateTime); System.out.println(gc); } private static void TimeZoneAPI() { System.out.println("*****************Time Zone API*******************"); // TimeZone to ZoneId ZoneId defaultZone = TimeZone.getDefault().toZoneId(); System.out.println(defaultZone); TimeZone tz = TimeZone.getTimeZone(defaultZone); System.out.println(tz); } }
Output
*********Current Date and Time***************
Local Date Time :2019-05-16T11:50:59.302
Local Date :2019-05-16
Local Time :11:50:59.303
Current Timestamp = 2019-05-16T06:20:59.303Z
2019-05-16T06:20:59.358Z
*****************Instant API*******************
Current Timestamp = 2019-05-16T06:20:59.369Z
Date = 2019-05-15T23:20:59.369
2019-05-16T06:20:59.373Z
Thu May 16 11:50:59 IST 2019
Specific Time = 2019-05-16T06:20:59.369Z
PT720H
*****************Gregorian Calendar API*******************
2019-05-16T11:50:59.387+05:30[Asia/Calcutta]
java.util.GregorianCalendar[time=1557987659387,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Calcutta",offset=19800000,dstSavings=0,useDaylight=false,transitions=7,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2019,MONTH=4,WEEK_OF_YEAR=20,WEEK_OF_MONTH=3,DAY_OF_MONTH=16,DAY_OF_YEAR=136,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=50,SECOND=59,MILLISECOND=387,ZONE_OFFSET=19800000,DST_OFFSET=0]
*****************Time Zone API*******************
Asia/Calcutta
sun.util.calendar.ZoneInfo[id="Asia/Calcutta",offset=19800000,dstSavings=0,useDaylight=false,transitions=7,lastRule=null]
*****************Local DateTime Formatting API*******************
Default format of LocalDate=2019-05-16
16::May::2019
20190516
Default format of LocalDateTime=2019-05-16T11:50:59.551
16::May::2019 11::50::59
20190516
Default format of Instant=2019-05-16T06:20:59.551Z
Default format after parsing = 2014-04-27T21:39:48
*****************Local Date API*******************
Current Date=2019-05-16
Specific Date=2016-01-01
java.time.DateTimeException: Invalid date 'February 29' as '2014' is not a leap year
Current Date in CST=2019-05-16
365th day from base date= 1971-01-01
at java.time.LocalDate.create(Unknown Source)
at java.time.LocalDate.of(Unknown Source)
at datetime.Java8DateTime.localDateAPI(Java8DateTime.java:160)
at datetime.Java8DateTime.main(Java8DateTime.java:34)
java.time.zone.ZoneRulesException: Unknown time-zone ID: IST
at java.time.zone.ZoneRulesProvider.getProvider(Unknown Source)
at java.time.zone.ZoneRulesProvider.getRules(Unknown Source)
at java.time.ZoneRegion.ofId(Unknown Source)
at java.time.ZoneId.of(Unknown Source)
at java.time.ZoneId.of(Unknown Source)
at datetime.Java8DateTime.localDateAPI(Java8DateTime.java:173)
at datetime.Java8DateTime.main(Java8DateTime.java:34)
100th day of 2014=2016-04-09
Year 2019 is Leap Year? false
Today is before 01/01/2017? false
Current Time=2019-05-16T11:50:59.619
20 days after today will be 2019-06-05
5 weeks after today will be 2019-06-20
30 months after today will be 2021-11-16
20 days before today will be 2019-04-26
5 weeks before today will be 2019-04-11
30 months before today will be 2016-11-16
First date of this month= 2019-05-01
Last date of this year= 2019-12-31
Period Format= P7M15D
Months remaining in the year= 7
*****************Local Date Time API*******************
Current DateTime=2019-05-16T11:50:59.620
Current DateTime=2019-05-16T11:50:59.620
Specific Date=2014-01-01T10:10:30
Current Date in IST=2019-05-16T11:50:59.620
10000th second time from 01/01/1970= 1970-01-01T02:46:40
*****************Local Time API*******************
Current Time=11:50:59.620
Specific Time of Day=12:20:25.000000040
Current Time in IST=11:50:59.620
10000th second time= 02:46:40
*********Set Date and Time Manually***************
Local Date :2012-12-12
Local Date :1970-05-31
Local Time :10:15:30
Local Time :13:18
*********Get Date and Time Values***************
Local Date :2019-05-16
Local Date time Format : 16/5/2019 11:50:59
*********Operation On LocalDate***************
Local Date :2018-02-14
Local Date :2020-08-18
*********Difference of On LocalDate***************
Days :4
Months :6
Years :2
Days :916
Months :30
Years :2
Above solutions are my search to perform all type of operations with date and time with java 8 API generally face while development. If you face other issue apart from it. Please mention in comments that will help with others.
You must log in to post a comment.