2013-07-23 70 views
17

Có cách nào dễ dàng trong C++ 11 để in thời gian tường hiện tại bằng cách sử dụng các quy tắc định dạng thích hợp của ngôn ngữ được liên kết với ostream đang được sử dụng không?Cách in thời gian hiện tại trong C++ 11?

Những gì tôi thực sự muốn làm là một cái gì đó như thế này:

myStream << std::chrono::system_clock::now(); 

và có ngày và thời gian in phù hợp với bất cứ điều gì locale gắn liền với myStream. C++ 11 cung cấp put_time, nhưng phải mất một chuỗi định dạng và tôi muốn định dạng được xác định bởi liên kết miền địa phương với luồng. Ngoài ra còn có time_puttime_put_byname, nhưng dựa trên các ví dụ tại cppreference.com, các chức năng này được sử dụng cùng với put_time.

Có cách nào đơn giản để in giá trị thời gian chờ mà không định dạng thủ công không?

Trả lời

16

Bạn có thể sử dụng put_time với chuỗi định dạng như "%c". %c là trình định dạng định dạng cho chuỗi ngày và giờ chuẩn cho ngôn ngữ. Kết quả trông giống như "Tue Jul 23 19:32:18 CEST 2013" trên máy của tôi (POSIX en_US locale, trong múi giờ của Đức).

auto now = std::chrono::system_clock::now(); 
auto now_c = std::chrono::system_clock::to_time_t(now); 
std::cout << std::put_time(std::localtime(&now_c), "%c") << '\n'; 
+9

Ngạc nhiên vì không có cách * hiện đại để in dữ liệu datetime. Chúng ta phải sử dụng các API C kiểu cũ. Nhưng, tốt, 'std :: chrono' là một bước tiến lớn trong các vấn đề datetime. Nhưng không có cách nào C++ 11 để in thời gian? – Manu343726

+5

@ Manu343726 (http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html) không được chuẩn hóa (không chắc chắn là do áp lực thời gian hay vì các lý do khác). –

+0

@RMartinhoFernandes Cảm ơn! Tôi không biết điều đó. – Manu343726

Các vấn đề liên quan