2011-03-25 41 views
16

Tôi đang cố gắng lấy thời gian hiện tại dưới dạng chuỗi định dạng "YYYY-MM-DD-HH-MM-SS" trong thanh lịch đường. Tôi có thể lấy thời gian hiện tại ở định dạng ISO từ thư viện "Ngày giờ" của Boost, nhưng nó có các chuỗi phân cách khác sẽ không hoạt động đối với tôi (tôi đang sử dụng nó trong tên tệp). Tất nhiên tôi chỉ có thể thay thế các chuỗi phân cách, nhưng có cảm giác rằng có một cách tốt hơn để làm điều này với các tùy chọn định dạng ngày giờ. Có cách nào không, và nếu có, làm thế nào tôi có thể sử dụng nó?Nhận thời gian hiện tại dưới dạng chuỗi YYYY-MM-DD-HH-MM-SS

Trả lời

30

Sử dụng std::strftime, tiêu chuẩn là C++.

#include <cstdio> 
#include <ctime> 

int main() 
{ 
    std::time_t rawtime; 
    std::tm* timeinfo; 
    char buffer [80]; 

    std::time(&rawtime); 
    timeinfo = std::localtime(&rawtime); 

    std::strftime(buffer,80,"%Y-%m-%d-%H-%M-%S",timeinfo); 
    std::puts(buffer); 

    return 0; 
} 
+0

Điều gì đó ghi vào một chuỗi 'std ::' và do đó không có mối quan tâm về tràn bộ đệm sẽ là tốt đẹp. Có thể hiểu được, 'strftime' sẽ được dự kiến ​​có độ dài tối đa có thể dự đoán được. Có gotchas nào không? –

+0

Có giải pháp ** an toàn thread ** nào không? Xem [link] (http://en.cppreference.com/w/cpp/chrono/c/localtime) - std :: localtime() không an toàn cho luồng. – Yuri

2

Câu trả lời tùy thuộc vào ý nghĩa của việc nhận và nhận. Nếu bạn đang cố gắng xuất chuỗi thời gian đã định dạng, hãy sử dụng strftime(). Nếu bạn đang cố gắng phân tích chuỗi văn bản thành định dạng nhị phân, hãy sử dụng strptime().

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