2011-03-25 13 views
16

के रूप में वर्तमान समय प्राप्त करना मैं वर्तमान समय को "YYYY-MM-DD-HH-MM-SS" स्वरूपित स्ट्रिंग के रूप में प्राप्त करने की कोशिश कर रहा हूं मार्ग। मैं बूस्ट की "डेट टाइम" लाइब्रेरी से आईएसओ प्रारूप में वर्तमान समय ले सकता हूं, लेकिन इसमें अन्य सीमांकन स्ट्रिंग्स हैं जो मेरे लिए काम नहीं करेंगे (मैं इसे फाइलनाम में उपयोग कर रहा हूं)। बेशक मैं केवल डरावना तारों को प्रतिस्थापित कर सकता हूं, लेकिन यह महसूस कर रहा हूं कि डेट-टाइम के स्वरूपण विकल्पों के साथ ऐसा करने का एक अच्छा तरीका है। क्या ऐसा कोई तरीका है, और यदि हां, तो मैं इसका उपयोग कैसे कर सकता हूं?YYYY-MM-DD-HH-MM-SS स्ट्रिंग

उत्तर

30

std::strftime का उपयोग करें, यह मानक 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

कुछ जो 'std :: string' को लिखता है और इस प्रकार बफर ओवरफ्लो के बारे में कोई चिंता नहीं है। समझा जा सकता है कि 'स्ट्रेटटाइम' की अनुमानित अधिकतम लंबाई होने की उम्मीद की जाएगी। क्या कोई गठिया है? –

+0

क्या कोई ** थ्रेड-सुरक्षित ** समाधान है? देखें [लिंक] (http://en.cppreference.com/w/cpp/chrono/c/localtime) - std :: localtime() थ्रेड-सुरक्षित नहीं है। – Yuri

2

उत्तर प्राप्त करने और लेने के लिए आपका क्या मतलब है इस पर निर्भर करता है। यदि आप स्वरूपित समय स्ट्रिंग आउटपुट करने का प्रयास कर रहे हैं, तो strftime() का उपयोग करें। यदि आप किसी बाइनरी प्रारूप में टेक्स्ट स्ट्रिंग को पार्स करने का प्रयास कर रहे हैं, तो strptime() का उपयोग करें।