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
  • DateTimeFormatter pro formátování a parsování
  • Period = rozdíl v datech, Duration = rozdíl v čase