String representation of time_t?

前端 未结 9 778
悲&欢浪女
悲&欢浪女 2020-12-09 02:05
time_t seconds;
time(&seconds);

cout << seconds << endl;

This gives me a timestamp. How can I get that epoch date into a string?<

相关标签:
9条回答
  • 2020-12-09 02:21

    Try std::stringstream.

    #include <string>
    #include <sstream>
    
    std::stringstream ss;
    ss << seconds;
    std::string ts = ss.str();
    

    A nice wrapper around the above technique is Boost's lexical_cast:

    #include <boost/lexical_cast.hpp>
    #include <string>
    
    std::string ts = boost::lexical_cast<std::string>(seconds);
    

    And for questions like this, I'm fond of linking The String Formatters of Manor Farm by Herb Sutter.

    UPDATE:

    With C++11, use to_string().

    0 讨论(0)
  • 2020-12-09 02:29

    The C++ way is to use stringstream.

    The C way is to use snprintf() to format the number:

     char buf[16];
     snprintf(buf, 16, "%lu", time(NULL));
    
    0 讨论(0)
  • 2020-12-09 02:29

    the function "ctime()" will convert a time to a string. If you want to control the way its printed, use "strftime". However, strftime() takes an argument of "struct tm". Use "localtime()" to convert the time_t 32 bit integer to a struct tm.

    0 讨论(0)
  • 2020-12-09 02:29

    Here's my formatter -- comments welcome. This q seemed like it had the most help getting me to my a so posting for anyone else who may be looking for the same.

    #include <iostream>
    #include "Parser.h"
    #include <string>
    #include <memory>
    #include <ctime>
    #include <chrono>
    #include <iomanip>
    #include <thread>
    
    using namespace std;
    string to_yyyyMMddHHmmssffffff();
    
    string to_yyyyMMddHHmmssffffff() {
        using namespace std::chrono;
        high_resolution_clock::time_point pointInTime = high_resolution_clock::now();
        std::time_t now_c = std::chrono::system_clock::to_time_t(pointInTime);
        microseconds micros = duration_cast<microseconds>(pointInTime.time_since_epoch());
        std::size_t fractional_microseconds = micros.count() % 1'000'000;
    
        std:stringstream microstream;
        microstream << "00000" << fractional_microseconds;
        string formatted = microstream.str();
        int index = formatted.length() - 6;
        formatted = formatted.substr(index);
        std::stringstream dateStream;
        dateStream << std::put_time(std::localtime(&now_c), "%F %T") << "." << formatted;
        formatted = dateStream.str();
    
        return formatted;
    }
    
    0 讨论(0)
  • 2020-12-09 02:34

    Try this if you want to have the time in a readable string:

    #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);  
    

    For further reference of strftime() check out cppreference.com

    0 讨论(0)
  • 2020-12-09 02:34

    localtime did not work for me. I used localtime_s:

    struct tm buf;
    char dateString[26];
    time_t time = time(nullptr);
    localtime_s(&buf, &time);
    asctime_s(dateString, 26, &buf);
    
    0 讨论(0)
提交回复
热议问题