Chuyển đổi một ngày thành chuỗi

C++:
Chuyển đổi một ngày thành chuỗi

Cách thực hiện:

Trong C++ hiện đại, thư viện <chrono><iomanip> là người bạn đồng hành của bạn cho các thao tác ngày-giờ. Dưới đây là một phương pháp nhanh chóng sử dụng std::put_time:

#include <iostream>
#include <iomanip>
#include <chrono>
#include <sstream>

int main() {
    auto now = std::chrono::system_clock::now(); // Lấy thời gian hiện tại
    auto time = std::chrono::system_clock::to_time_t(now); // Chuyển đổi thành time_t
    
    // Chuyển đổi thành cấu trúc tm để định dạng
    std::tm tm = *std::localtime(&time);

    // Luồng chuỗi cho đầu ra
    std::stringstream ss;

    ss << std::put_time(&tm, "%Y-%m-%d %H:%M:%S"); // Định dạng: YYYY-MM-DD HH:MM:SS

    std::string date_str = ss.str(); // Chuyển đổi thành chuỗi

    std::cout << date_str << std::endl; // Xuất chuỗi ngày
    return 0;
}

Ví dụ về đầu ra (tùy thuộc vào ngày và giờ hiện tại):

2023-03-15 14:25:30

Tìm hiểu kỹ lưỡng

Trước khi <chrono> được giới thiệu, các lập trình viên C++ thường phải vật lộn với việc xử lý thời gian theo phong cách C qua <ctime>. Điều này kém trực quan và dễ mắc lỗi hơn do quản lý bộ nhớ thủ công và những đặc thù phụ thuộc vào nền tảng.

Các phương án thay thế cho std::put_time bao gồm việc sử dụng strftime, nhưng đó là cách làm mang phong cách C. Các thư viện bên thứ ba như Boost.Date_Time có thể cung cấp nhiều chức năng hơn nhưng có chi phí thêm phụ thuộc.

Một chi tiết thực hiện quan trọng là hiểu các chỉ định định dạng trong std::put_time, giống với những gì được sử dụng trong strftime. Bạn đang ánh xạ các trình giữ chỗ cho các thành phần ngày hoặc giờ — %Y cho năm đầy đủ, %m cho tháng, v.v.

Xem thêm