2009-06-15 18 views

उत्तर

33

std::stringstream की कोशिश करो।

#include <boost/lexical_cast.hpp> 
#include <string> 

std::string ts = boost::lexical_cast<std::string>(seconds); 

और इस तरह के प्रश्नों के लिए, मैं हर्ब Sutter द्वारा The String Formatters of Manor Farm जोड़ने के शौकीन हूँ:

#include <string> 
#include <sstream> 

std::stringstream ss; 
ss << seconds; 
std::string ts = ss.str(); 

ऊपर तकनीक के चारों ओर एक अच्छा आवरण बूस्ट के lexical_cast है।

अद्यतन:

सी ++ के साथ 11, to_string() का उपयोग करें।

1

मानक सी ++ के पास स्वयं का कोई समय/दिनांक कार्य नहीं है - आपको सी localtime और संबंधित कार्यों का उपयोग करने की आवश्यकता है। यदि आप एक पठनीय स्ट्रिंग में समय है चाहता हूँ

+6

आपका मूल प्रश्न पूछा कैसे एक तिथि प्राप्त करने के लिए, लेकिन यह पता चला है कि आप वास्तव में क्या चाहते थे एक स्ट्रिंग के रूप में सेकंड की संख्या थी। यह सटीक होने में मदद करता है। –

20

इस प्रयास करें:

#include <ctime> 

std::time_t now = std::time(NULL); 
std::tm * ptm = std::localtime(&now); 
char buffer[32]; 
// Format: Mo, 15.06.2009 20:20:00 
std::strftime(buffer, 32, "%a, %d.%m.%Y %H:%M:%S", ptm); 

strftime के आगे संदर्भ के लिए() की जाँच cppreference.com

+0

nulldevice, मैं ऊपर स्पष्ट नहीं था, लेकिन मैं युग की तारीख (timestamp) का एक स्ट्रिंग प्रतिनिधित्व चाहता था। – g33kz0r

1

समारोह "ctime()" एक समय में परिवर्तित कर देंगे एक स्ट्रिंग के लिए। यदि आप इसके मुद्रित तरीके से नियंत्रित करना चाहते हैं, तो "strftime" का उपयोग करें। हालांकि, strftime() "संरचना टीएम" का तर्क लेता है। Tim_t 32 बिट पूर्णांक को स्ट्रक्चर टीएम में कनवर्ट करने के लिए "लोकलटाइम()" का उपयोग करें।

0

ऐसे कई तरीके हैं जिनमें आप समय प्रारूपित करना चाहते हैं (समय क्षेत्र के आधार पर, आप इसे कैसे प्रदर्शित करना चाहते हैं, आदि), ताकि आप आसानी से एक समय-सारणी को एक स्ट्रिंग में परिवर्तित नहीं कर सकें।

सी रास्ता ctime का उपयोग करना है या strftime प्लस या तो localtime या gmtime का उपयोग करना है।

यदि आप रूपांतरण करने के तरीके की तरह अधिक सी ++ चाहते हैं, तो आप Boost.DateTime लाइब्रेरी की जांच कर सकते हैं।

+0

अपडेट किया गया। धन्यवाद। –

2

सी ++ तरीका स्ट्रिंगस्ट्रीम का उपयोग करना है।

char buf[16]; 
snprintf(buf, 16, "%lu", time(NULL)); 
+1

time_t अनिवार्य रूप से हस्ताक्षरित या लंबे आकार के समान आकार की नहीं है। वास्तव में, यह आमतौर पर हस्ताक्षरित होता है: http://stackoverflow.com/questions/471248/what-is-ultently-a-time-t-typedef-to – nitzanms

3

यहाँ शीर्ष जवाब मेरे लिए काम नहीं करता है:

सी रास्ता संख्या को स्वरूपित करने snprintf() का उपयोग किया जा सके।

दोनों stringstream और lexical_cast जवाब का प्रदर्शन निम्न उदाहरण सुझाव के रूप में देखें:

#include <iostream> 
#include <sstream> 

int main(int argc, char** argv){ 
const char *time_details = "2017-01-27 06:35:12"; 
    struct tm tm; 
    strptime(time_details, "%Y-%m-%d %H:%M:%S", &tm); 
    time_t t = mktime(&tm); 
    std::stringstream stream; 
    stream << t; 
    std::cout << t << "/" << stream.str() << std::endl; 
} 

आउटपुट: 1485498912/1485498912 मिले here


#include <boost/lexical_cast.hpp> 
#include <string> 

int main(){ 
    const char *time_details = "2017-01-27 06:35:12"; 
    struct tm tm; 
    strptime(time_details, "%Y-%m-%d %H:%M:%S", &tm); 
    time_t t = mktime(&tm); 
    std::string ts = boost::lexical_cast<std::string>(t); 
    std::cout << t << "/" << ts << std::endl; 
    return 0; 
} 

आउटपुट: 1485498912/1485498912 मिले : here


2 उच्चतम रेट समाधान स्थानीय स्तर पर काम करता है:

#include <iostream> 
#include <string> 
#include <ctime> 

int main(){ 
    const char *time_details = "2017-01-27 06:35:12"; 
    struct tm tm; 
    strptime(time_details, "%Y-%m-%d %H:%M:%S", &tm); 
    time_t t = mktime(&tm); 

    std::tm * ptm = std::localtime(&t); 
    char buffer[32]; 
    std::strftime(buffer, 32, "%Y-%m-%d %H:%M:%S", ptm); 
    std::cout << t << "/" << buffer; 
} 

आउटपुट: +१४८५४९८९१२/2017/01/27 06:35:12 मिला: here


संबंधित मुद्दे