std::put_time în C++

Formatare C++11

Afișează o dată și o oră (std::tm) după un șablon, de exemplu %d.%m.%Y %H:%M.

Sintaxă
#include <iomanip>
#include <ctime>
std::cout << std::put_time(const std::tm* data, const char* sablon);

Ce face std::put_time

std::put_time primește un pointer la o structură std::tm (zi, lună, an, oră etc.) și un șablon cu marcaje care încep cu %: %d ziua, %m luna, %Y anul cu 4 cifre, %H ora (00-23), %M minutul, %S secunda, %A numele zilei, %B numele lunii.

Atenție la câmpurile din std::tm: tm_year înseamnă anii de la 1900 (2026 se scrie 126), iar tm_mon începe de la 0 (octombrie este 9). Data curentă se obține cu std::time și std::localtime.

Numele zilelor și lunilor sunt în engleză, dacă nu setezi o localizare. Pentru cod nou, <chrono> împreună cu std::format este o alternativă mai sigură.

Parametri

Parametru Descriere
data Pointer la un std::tm completat.
sablon Textul cu marcaje %, la fel ca la strftime.

Exemple

Exemplul 1: O dată fixă în mai multe formate

#include <ctime>
#include <iomanip>
#include <iostream>

int main() {
    std::tm data{};
    data.tm_year = 2026 - 1900;   // anii de la 1900
    data.tm_mon = 10 - 1;         // lunile de la 0
    data.tm_mday = 19;
    data.tm_hour = 14;
    data.tm_min = 30;
    data.tm_wday = 1;             // luni (0 = duminică)

    std::cout << std::put_time(&data, "%d.%m.%Y %H:%M") << '\n';
    std::cout << std::put_time(&data, "%Y-%m-%d") << '\n';
    std::cout << std::put_time(&data, "%A, %d %B %Y") << '\n';
}

Rezultat

19.10.2026 14:30
2026-10-19
Monday, 19 October 2026

Exemplul 2: Data și ora curentă

Rezultatul depinde de momentul rulării.

#include <ctime>
#include <iomanip>
#include <iostream>

int main() {
    std::time_t acum = std::time(nullptr);
    std::tm local = *std::localtime(&acum);
    std::cout << "Acum este " << std::put_time(&local, "%d.%m.%Y, ora %H:%M:%S") << '\n';
}

Rezultat posibil (diferă la fiecare rulare)

Acum este 19.10.2026, ora 14:32:07

Greșeli frecvente

  • Pui tm_year = 2026 și tm_mon = 10: obții anul 3926 și luna noiembrie. Anul se dă de la 1900, iar luna de la 0.
  • std::localtime returnează un pointer la o zonă internă care se suprascrie la apelul următor și nu este sigură între fire de execuție. Copiază rezultatul imediat, ca în exemplu.

Comenzi înrudite

  • std::format: Construiește un std::string dintr-un șablon cu acolade {} și valori (C++20).
  • std::setw: Stabilește lățimea minimă a următoarei valori, cu aliniere și caracter de umplere.