LocalDateTime.truncatedTo în Java

Taie partea mai mică decât unitatea dată: truncatedTo(ChronoUnit.HOURS) face 14:37:52 → 14:00.

Sintaxă
LocalDateTime truncatedTo(TemporalUnit unitate)

Ce face LocalDateTime.truncatedTo

truncatedTo pune la zero toate câmpurile mai mici decât unitatea aleasă. Cu ChronoUnit.MINUTES dispar secundele și nanosecundele; cu ChronoUnit.HOURS dispar și minutele; cu ChronoUnit.DAYS rămâne miezul nopții zilei respective.

Este des folosită ca să elimini nanosecundele din LocalDateTime.now() înainte de afișare sau salvare, ori ca să grupezi evenimente pe ore. Nu rotunjește: 14:59 trunchiat la ore devine 14:00, nu 15:00.

Unități mai mari decât o zi (MONTHS, YEARS) nu sunt acceptate și aruncă UnsupportedTemporalTypeException. Pentru „începutul lunii” folosește withDayOfMonth(1).

Parametri

Parametru Descriere
unitate De obicei o valoare ChronoUnit: SECONDS, MINUTES, HOURS, DAYS.

Ce returnează

Un LocalDateTime nou, trunchiat.

Exemple

Exemplul 1: Trunchiere la diferite unități

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

public class Main {
    public static void main(String[] args) {
        LocalDateTime t = LocalDateTime.of(2026, 10, 19, 14, 37, 52, 123_456_789);
        System.out.println("Original:  " + t);
        System.out.println("SECONDS:   " + t.truncatedTo(ChronoUnit.SECONDS));
        System.out.println("MINUTES:   " + t.truncatedTo(ChronoUnit.MINUTES));
        System.out.println("HOURS:     " + t.truncatedTo(ChronoUnit.HOURS));
        System.out.println("DAYS:      " + t.truncatedTo(ChronoUnit.DAYS));
    }
}

Rezultat

Original:  2026-10-19T14:37:52.123456789
SECONDS:   2026-10-19T14:37:52
MINUTES:   2026-10-19T14:37
HOURS:     2026-10-19T14:00
DAYS:      2026-10-19T00:00

Exemplul 2: Vizite pe site grupate pe ore

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Map;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        String[] vizite = {"2026-10-19T09:05:11", "2026-10-19T09:48:30", "2026-10-19T10:01:02",
                           "2026-10-19T10:59:59", "2026-10-19T11:30:00"};
        Map<LocalDateTime, Integer> peOre = new TreeMap<>();
        for (String v : vizite) {
            peOre.merge(LocalDateTime.parse(v).truncatedTo(ChronoUnit.HOURS), 1, Integer::sum);
        }
        peOre.forEach((ora, nr) -> System.out.println(ora.toLocalTime() + " -> " + nr + (nr == 1 ? " vizită" : " vizite")));
    }
}

Rezultat

09:00 -> 2 vizite
10:00 -> 2 vizite
11:00 -> 1 vizită

Greșeli frecvente

  • Te aștepți la rotunjire. truncatedTo doar taie: 10:59:59 devine 10:00.
  • Încerci truncatedTo(ChronoUnit.MONTHS). Aruncă excepție; folosește withDayOfMonth(1).truncatedTo(ChronoUnit.DAYS).

Comenzi înrudite

  • ChronoUnit: Enumerarea unităților de timp (DAYS, MONTHS, HOURS…); ChronoUnit.DAYS.between(a, b) numără zilele dintre două date.
  • LocalDateTime.toLocalDate: Extrage doar data (fără oră) dintr-un LocalDateTime; toLocalTime extrage doar ora.
  • LocalDateTime: Data și ora împreună (2026-10-19T14:30), fără fus orar. LocalDateTime.now() dă momentul curent după ceasul local.
  • Instant: Un moment exact pe axa timpului, în UTC, măsurat în secunde și nanosecunde de la 1 ianuarie 1970.