w ,

FajneFajne

API daty i czasu w Java 8

Wraz z wersją 8 Java zyskała nowe API daty i godziny. Dotychczasowe klasy do zarządzania czasem takie jak GergorianCalendar, Date, Calendar są już niezalecane do wykorzystywania. Wiele metod z nich zostało opatrzone adnotacją @Deprecated. Nowe API dostarcza metody zalecane do użytku. Oczywiście istnieje pełna zgodność miedzy nowym a starym API. Można swobodnie dokonywać konwersji miedzy wszystkimi typami.

Poniżej lista podstawowych klas które weszły wraz z Java 8.

• Instant – bieżący czas liczony od 01-01-1970;
• LocalDate – reprezentacja daty w postaci rok-miesiąc-dzień;
• LocalTime – reprezentacja czasu w postaci godzina-minuta-sekunda;
• LocalDateTime – reprezentacja czasu w postaci rok-miesiąc-dzień-godzina-minuta-sekunda;
• DateTimeFormatter – wyrażenie regularne prezentujące datę;
• Year – reprezentacja roku;
• YearMonth – reprezentacja roku i miesiąca;
• DayOfWeek – enum z dniami tygodnia;
• Month – enum z dniami miesiąca;
• Duration – sekundowa reprezentacja casu;
• Clock – aktualna data, godzina i strefa czasowa;

Przypadki użycia i konwersje

 

Aktualny zapis dat:

String date = 2005-05-12;
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-mm-dd");
LocalDate dt = dtf.parseLocalDate(date);

 

Z nowego API do starego

LocalDateTime dateTime = LocalDateTime.of(2002, Month.MARCH, 1, 1, 1);
Instant instant = dateTime.atZone(ZoneId.systemDefault()).toInstant(); 
Date date = Date.from(instant);

 

LocalDate localDate = LocalDate.of(2002, Month.JANUARY, 2);
Instant instant = localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant(); 
Date date = Date.from(instant);

 

LocalTime localTime = LocalTime.now()
Instant instant =localTime.atDate(LocalDate.of(A_YEAR, A_MONTH, A_DAY)).atZone(ZoneId.systemDefault()).toInstant(); 
Date date = Date.from(instant);

 

Z staregonowego API do nowego

Date date = new Date(0);
Instant instant = Instant.ofEpochMilli(date.getTime());
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

 

Date date = new Date(0);
Instant instant = Instant.ofEpochMilli(date.getTime()); 
LocalDate localDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalDate();

 

Date date = new Date(0);
Instant instant = Instant.ofEpochMilli(date.getTime()); 
LocalTime localTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalTime();

Napisane przez Przemysław Bykowski

Aktywny programista i energiczny trener. Specjalizuje się w Spring Boot i uczę go w ramach AkademiaSpring.pl. Po godzinach udzielam się na YouTubach. Więcej o mnie.

Dodaj komentarz

Sikuli – zgrabne narzędzie dla automatyzacji zadań

Mockito wprowadzenie i przykłady