New Date-Time API in Java 8

New date-time API is introduced in Java 8 to overcome the following drawbacks of old date-time API :

  1. Not thread safe : Unlike old java.util.Date which is not thread safe the new date-time API is immutable and doesn’t have setter methods.
  2. Less operations : In old API there are only few date operations but the new API provides us with many date operations.

Java 8 under the package java.time introduced a new date-time API, most important classes among them are :

  1. Local : Simplified date-time API with no complexity of timezone handling.
  2. Zoned : Specialized date-time API to deal with various timezones.
  1. LocalDate/LocatTime and LocalDateTime API : Use it when time zones are NOT required.
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java code for LocalDate
    // / LocalTime Function
    import java.time.*;
    import java.time.format.DateTimeFormatter;
       
    public class Date {
      
    public static void LocalDateTimeApi()
    {
       
        // the current date
        LocalDate date = LocalDate.now();
        System.out.println("the current date is "+
                            date);
       
       
        // the current time
        LocalTime time = LocalTime.now();
        System.out.println("the current time is "+
                            time);
           
       
        // will give us the current time and date
        LocalDateTime current = LocalDateTime.now();
        System.out.println("current date and time : "+
                            current);
       
       
        // to print in a particular format
        DateTimeFormatter format = 
          DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");  
        
        String formatedDateTime = current.format(format);  
         
        System.out.println("in foramatted manner "+
                            formatedDateTime);
       
       
        // printing months days and seconds
        Month month = current.getMonth();
        int day = current.getDayOfMonth();
        int seconds = current.getSecond();
        System.out.println("Month : "+month+" day : "+
                            day+" seconds : "+seconds);
       
        // printing some specified date
        LocalDate date2 = LocalDate.of(1950,1,26);
        System.out.println("the repulic day :"+date2);
       
        // printing date with current time.
        LocalDateTime specificDate = 
            current.withDayOfMonth(24).withYear(2016);
      
        System.out.println("specfic date with "+
                           "current time : "+specificDate);
    }
      
        // Driver code
        public static void main(String[] args) 
        {
            LocalDateTimeApi();
        }
    }

    chevron_right

    
    

    Output:

    the current date is 2018-04-09
    the current time is 06:21:10.409
    current date and time : 2018-04-09T06:21:10.410
    in foramatted manner 09-04-2018 06:21:10
    Month : APRIL day : 9 seconds : 10
    the repulic day :1950-01-26
    specfic date with current time : 2016-04-24T06:21:10.410
    
  2. Zoned date-time API : Use it when time zones are to be considered
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java code for Zoned date-time API
    import java.time.LocalDateTime;
    import java.time.ZoneId;
    import java.time.ZonedDateTime;
    import java.time.format.DateTimeFormatter;
      
    public class Zone {
      
    // Function to get Zoned Date and Time
    public static void ZonedTimeAndDate()
    {
        LocalDateTime date = LocalDateTime.now();
        DateTimeFormatter format1 = 
          DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss"); 
          
        String formattedCurrentDate = date.format(format1);
          
        System.out.println("formatted current Date and"+
                          " Time : "+formattedCurrentDate); 
      
        // to get the current zone
        ZonedDateTime currentZone = ZonedDateTime.now(); 
        System.out.println("the current zone is "+
                            currentZone.getZone()); 
      
        // getting time zone of specific place
        // we use withZoneSameInstant(): it is
        // used to return a copy of this date-time 
        // with a different time-zone,  
        // retaining the instant.
        ZoneId tokyo = ZoneId.of("Asia/Tokyo");
      
        ZonedDateTime tokyoZone =
                currentZone.withZoneSameInstant(tokyo);
                        
        System.out.println("tokyo time zone is "
                            tokyoZone);
      
        DateTimeFormatter format = 
            DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss"); 
          
        String formatedDateTime = tokyoZone.format(format); 
      
        System.out.println("formatted tokyo time zone "+
                            formatedDateTime);
          
    }
          
        // Driver code
        public static void main(String[] args) 
        {
              
            ZonedTimeAndDate();
              
        }
    }

    chevron_right

    
    

    Output:

    formatted current Date and Time : 09-04-2018 06:21:13
    the current zone is Etc/UTC
    tokyo time zone is 2018-04-09T15:21:13.220+09:00[Asia/Tokyo]
    formatted tokyo time zone 09-04-2018 15:21:13
    
  3. Period and Duration classes :
    Period : It deals with date based amount of time.
    Duration : It deals with time based amount of time.



    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java code for period and duration
    import java.time.LocalDate;
    import java.time.LocalTime;
    import java.time.Month;
    import java.time.Duration;
    import java.time.Period;
      
    public class Geekforgeeks {
      
        public static void checkingPeriod()
        {
            LocalDate date1 = LocalDate.now();
      
            LocalDate date2 = 
                LocalDate.of(2014, Month.DECEMBER, 12);
      
            Period gap = Period.between(date2, date1);
            System.out.println("gap between dates "+
                               "is a period of "+gap);
    }
      
        // Function to check duration
        public static void checkingDuraion()
        {  
      
            LocalTime time1 = LocalTime.now();
            System.out.println("the current time is " +
                                time1);
      
            Duration fiveHours = Duration.ofHours(5);
      
            // adding five hours to the current 
            // time and storing it in time2
            LocalTime time2 = time1.plus(fiveHours);
      
            System.out.println("after adding five hours " +
                               "of duration " + time2);
      
            Duration gap = Duration.between(time2, time1);
            System.out.println("duraion gap between time1" +
                               " & time2 is " + gap);
    }
      
        // Driver code
        public static void main(String[] args) 
        {
            checkingPeriod();
            checkingDuraion();
        }
    }

    chevron_right

    
    

    Output:

    gap between dates is a period of P3Y3M28D
    the current time is 06:21:18.248
    after adding five hours of duration 11:21:18.248
    duraion gap between time1 & time2 is PT-5H
    
  4. ChronoUnits Enum : java.time.temporal.ChronoUnit enum is added in Java 8 to replace integer values used in old API to represent day, month etc.
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java code for ChronoUnits Enum
    import java.time.LocalDate;
    import java.time.temporal.ChronoUnit;
      
    public class Geeksforgeeks {
      
        // Function to check ChronoUnit 
        public static void checkingChronoEnum()
        {
            LocalDate date = LocalDate.now();
            System.out.println("current date is :"
                                date);
          
            // adding 2 years to the current date
            LocalDate year = 
                 date.plus(2, ChronoUnit.YEARS);
              
            System.out.println("next to next year is "
                                year);
                  
            // adding 1 month to the current data
            LocalDate nextMonth = 
                      date.plus(1, ChronoUnit.MONTHS);
              
            System.out.println("the next month is "
                                nextMonth);
          
            // adding 1 week to the current date
            LocalDate nextWeek = 
                      date.plus(1, ChronoUnit.WEEKS);
              
            System.out.println("next week is " + nextWeek);
          
            // adding 2 decades to the current date
            LocalDate Decade = 
                      date.plus(2, ChronoUnit.DECADES);
                        
            System.out.println("20 years after today "
                                Decade);
        }
          
        // Driver code
        public static void main(String[] args) {
          
            checkingChronoEnum();
              
        }
    }

    chevron_right

    
    

    Output:

    current date is :2018-04-09
    next to next year is 2020-04-09
    the next month is 2018-05-09
    next week is 2018-04-16
    20 years after today 2038-04-09
    
  5. TemporalAdjuster : It is used to perform various date related operations.
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java code Temporal Adjuster
    import java.time.LocalDate;
    import java.time.temporal.TemporalAdjusters;
    import java.time.DayOfWeek;
      
    public class Geek 
    {
      
        // Function to check date and time 
        // according to our requirement
        public static void checkingAdjusters()
        {
      
            LocalDate date = LocalDate.now();
            System.out.println("the current date is "+
                                date);
      
            // to get the first day of next month
            LocalDate dayOfNextMonth = 
                  date.with(TemporalAdjusters.
                            firstDayOfNextMonth());
          
            System.out.println("firstDayOfNextMonth : " +
                                dayOfNextMonth );
      
            // get the next saturday
            LocalDate nextSaturday = 
                    date.with(TemporalAdjusters.
                              next(DayOfWeek.SATURDAY));
              
            System.out.println("next satuday from now is "+
                                nextSaturday);
      
            // first day of current month
            LocalDate firstDay = 
                      date.with(TemporalAdjusters.
                      firstDayOfMonth());
                                         
            System.out.println("firstDayOfMonth : " +
                                firstDay);
      
            // last day of current month     
            LocalDate lastDay = 
                      date.with(TemporalAdjusters.
                                lastDayOfMonth());
              
            System.out.println("lastDayOfMonth : "
                                lastDay);
    }
          
        // Driver code
        public static void main(String[] args) 
        {
      
            checkingAdjusters();
        }
    }

    chevron_right

    
    

    Output:

    the current date is 2018-04-09
    firstDayOfNextMonth : 2018-05-01
    next satuday from now is 2018-04-14
    firstDayOfMonth : 2018-04-01
    lastDayOfMonth : 2018-04-30
    

Attention reader! Don’t stop learning now. Get hold of all the important Java and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

A polyglot and a Big Data enthusiast

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :
Practice Tags :


2


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.