Práce s časem
Proč to potřebuji?
Téměř každá aplikace pracuje s datem a časem -- od plánování událostí po logování. Java 8+ nabízí moderní immutable API v balíku java.time, které nahrazuje zastaralé třídy Date a Calendar.
Teorie
Od Java 8 se používá balík java.time. Všechny typy jsou immutable. Starší Date a Calendar jsou zastaralé.
Čas je interně uložen jako počet nanosekund od epochy (1.1.1970). Převod na čitelný řetězec se provádí pomocí DateTimeFormatter.
Příklady
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
// === Základní typy ===
LocalDate datum = LocalDate.now(); // 2026-04-15
LocalTime cas = LocalTime.now(); // 14:30:15.123
LocalDateTime datumCas = LocalDateTime.now(); // 2026-04-15T14:30:15
Instant okamzik = Instant.now(); // UTC timestamp
// === Vytvoření konkrétního data ===
LocalDate narozeniny = LocalDate.of(2000, 3, 15);
LocalTime obed = LocalTime.of(12, 30);
LocalDateTime schuzka = LocalDateTime.of(2026, 5, 1, 10, 0);
// === Operace (vrací NOVÝ objekt – immutable) ===
LocalDate zitra = datum.plusDays(1);
LocalDate minulyMesic = datum.minusMonths(1);
long dniMeziDaty = ChronoUnit.DAYS.between(narozeniny, datum);
// === Formátování (datum → String) ===
DateTimeFormatter cesky = DateTimeFormatter.ofPattern("d. M. yyyy");
String text = datum.format(cesky); // "15. 4. 2026"
DateTimeFormatter iso = DateTimeFormatter.ISO_LOCAL_DATE;
String isoText = datum.format(iso); // "2026-04-15"
// === Parsování (String → datum) ===
LocalDate parsed = LocalDate.parse("15. 4. 2026", cesky);
LocalDate parsedIso = LocalDate.parse("2026-04-15");
// === Porovnání ===
boolean pred = narozeniny.isBefore(datum); // true
boolean po = datum.isAfter(narozeniny); // true
// === Duration a Period ===
Duration trvani = Duration.ofHours(2).plusMinutes(30); // 2h 30m
Period obdobi = Period.between(narozeniny, datum);
System.out.println("Věk: " + obdobi.getYears() + " let"); // Věk: 26 let
Shrnutí
Klíčové body
LocalDate= datum,LocalTime= čas,LocalDateTime= obojí- Všechny typy jsou immutable – operace vrací nový objekt
DateTimeFormatterpro formátování a parsováníPeriod= rozdíl v datech,Duration= rozdíl v čase