c++11 获取时间戳 timestamp 转字符串

创建日期: 2024-07-03 11:34 | 作者: 风波 | 浏览次数: 15 | 分类: C++

时间戳转字符串

来源:https://blog.csdn.net/xb_2015/article/details/122220722

#include <chrono>
#include <ctime>
#include <iomanip>
#include <sstream>

std::string timestr(unsigned int sec) {
    time_t t = sec;
    std::tm tms;
    std::ostringstream oss;

    if(gmtime_r(&t, &tms)) {
        oss << std::put_time(&tms, "%Y-%m-%d %H:%M:%S");
        return oss.str();
    }   
    return ""; 
}

获取时间戳 方法一

来源:https://stackoverflow.com/questions/6012663/get-unix-timestamp-with-c

#include <iostream>
#include <chrono>

unsigned int timestamp() {
    const auto p1 = std::chrono::system_clock::now();
    int secs = std::chrono::duration_cast<std::chrono::seconds>(p1.time_since_epoch()).count();
    return secs;
}

int main()
{
    const auto p1 = std::chrono::system_clock::now();
    int secs = std::chrono::duration_cast<std::chrono::seconds>(
                   p1.time_since_epoch()).count();
    std::cout << "seconds since epoch: "
              << secs << '\n';
}

注意⚠️:计算时间差 duration 的最后,需要调用 count() 方法。

获取时间戳 方法二

Using C++17 or earlier

来源:https://en.cppreference.com/w/cpp/chrono/c/time

#include <ctime>
#include <iostream>

int main()
{
    std::time_t result = std::time(nullptr);
    std::cout << std::asctime(std::localtime(&result))
              << result << " seconds since the Epoch\n";
}

输出:

Wed Sep 21 10:27:52 2011
1316615272 seconds since the Epoch

获取时间戳 方法三:获取毫秒时间戳

来源:https://en.cppreference.com/w/cpp/chrono/duration/duration_cast

#include <chrono>
#include <iostream>
#include <ratio>
#include <thread>

void f()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
}

int main()
{
    const auto t1 = std::chrono::high_resolution_clock::now();
    f();
    const auto t2 = std::chrono::high_resolution_clock::now();

    // floating-point duration: no duration_cast needed
    const std::chrono::duration<double, std::milli> fp_ms = t2 - t1;

    // integral duration: requires duration_cast
    const auto int_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1);

    // converting integral duration to integral duration of
    // shorter divisible time unit: no duration_cast needed
    const std::chrono::duration<long, std::micro> int_usec = int_ms;

    std::cout << "f() took " << fp_ms << ", or "
              << int_ms << " (whole milliseconds), or "
              << int_usec << " (whole microseconds)\n";
}

其中,计算时间差的时候,可以将 const auto int_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1); 替换为 const auto msdur = std::chrono::duration_cast<std::chrono::milliseconds>(t1.time_since_epoch());,也就是计算当前时间和 1971年的时候的时间差。

15 浏览
10 爬虫
0 评论