Obliczanie daty w przyszłości lub przeszłości

Java:
Obliczanie daty w przyszłości lub przeszłości

Jak to zrobić:

W Java korzystamy z java.time, zestawu klas wprowadzonych w Java 8.

import java.time.LocalDate;
import java.time.Period;

public class FuturePastDateCalculation {

    public static void main(String[] args) {
        // Ustal dzisiejszą datę
        LocalDate today = LocalDate.now();
        System.out.println("Dzisiaj: " + today);

        // Dodaj 10 dni do aktualnej daty
        LocalDate tenDaysLater = today.plusDays(10);
        System.out.println("Za 10 dni: " + tenDaysLater);

        // Odejmij 1 miesiąc
        LocalDate oneMonthBefore = today.minusMonths(1);
        System.out.println("Miesiąc temu: " + oneMonthBefore);
    }
}

Wyjście:

Dzisiaj: 2023-04-01
Za 10 dni: 2023-04-11
Miesiąc temu: 2023-03-01

Głębsze spojrzenie:

Przed Java 8, manipulacja datami była kłopotliwa i błędna. Używanie java.util.Date i SimpleDateFormat przeplatało się z problemami związanych z bezpieczeństwem wątków i niewygodnym API. java.time wprowadza ludzkie podejście do czasu: niezmienne obiekty (Immutable), klarowne metody, i unikanie pułapek stref czasowych.

Alternatywy zawierają biblioteki zewnętrzne jak Joda-Time, ale java.time jest zalecanym rozwiązaniem od Java 8. W razie potrzeby istnieje też obsługa konwersji pomiędzy starymi a nowymi rodzajami dat przez .toInstant() i .from().

W praktyce, wybór techniki zależy od wymagań. Do obsługi złożonych operacji na datach może być potrzebne użycie dodatkowych klas jak LocalDateTime czy ZonedDateTime.

Zobacz również:

Warto też zajrzeć do źródła samego JDK, by zobaczyć, jak metody są zaimplementowane – to dobre ćwiczenie na rozumienie kodu.