美文网首页
C++ 获取当前日期精确到毫秒的几种方法

C++ 获取当前日期精确到毫秒的几种方法

作者: 天天_盖世英雄 | 来源:发表于2022-01-13 21:18 被阅读0次

    以下几种方式都是来自网上搜集资料的汇总,对于老的方式,容易出现问题,比如:利用 ftime 函数的, ndk 下,就不通用了,编译不过(函数被弃用),下面的方式都是比较通用的做法,希望对大家有帮助。

    方法一:

    #include <stdio.h>
    #include <string.h>
    #include <sys/time.h>
    #include <iostream>
    #include <iomanip>
    #include <ctime>
    #include <chrono>
    /*
    取当前时间,精确到微秒;
    */
    int main(int argc, char *argv[])
    {
        auto now = std::chrono::system_clock::now();
        //通过不同精度获取相差的毫秒数
        uint64_t dis_millseconds = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count()
            - std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()).count() * 1000;
        time_t tt = std::chrono::system_clock::to_time_t(now);
        auto time_tm = localtime(&tt);
        char strTime[25] = { 0 };
        sprintf(strTime, "%d-%02d-%02d %02d:%02d:%02d %03d", time_tm->tm_year + 1900,
            time_tm->tm_mon + 1, time_tm->tm_mday, time_tm->tm_hour,
            time_tm->tm_min, time_tm->tm_sec, (int)dis_millseconds);
        std::cout << strTime << std::endl;
    
        strftime(tmp, sizeof(tmp), "%Y-%m-%d %X:%A", localtime(&strTime) );
        printf("[%s]Tian debug LogPrint: %s\n", tmp, logConent.c_str());
        return 1;
    }
    

    方法二

    #include <ctime>
    #include <string>
    #include <chrono>
    #include <sstream>
    #include <iomanip>
    #include <iostream>
    
    // use strftime to format time_t into a "date time"
    std::string date_time(std::time_t posix)
    {
        char buf[20]; // big enough for 2015-07-08 10:06:51\0
        std::tm tp = *std::localtime(&posix);
        return {buf, std::strftime(buf, sizeof(buf), "%F %T", &tp)};
    }
    
    std::string stamp()
    {
        using namespace std;
        using namespace std::chrono;
    
        // get absolute wall time
        auto now = system_clock::now();
    
        // find the number of milliseconds
        auto ms = duration_cast<milliseconds>(now.time_since_epoch()) % 1000;
    
        // build output string
        std::ostringstream oss;
        oss.fill('0');
    
        // convert absolute time to time_t seconds
        // and convert to "date time"
        oss << date_time(system_clock::to_time_t(now));
        oss << '.' << setw(3) << ms.count();
    
        return oss.str();
    }
    
    int main()
    {
        std::cout << stamp() << '\n';
    }
    
    

    方法三 ( 微秒 )

    std::string stamp()
    {
        using namespace std;
        using namespace std::chrono;
    
        auto now = system_clock::now();
    
        // use microseconds % 1000000 now
        auto us = duration_cast<microseconds>(now.time_since_epoch()) % 1000000;
    
        std::ostringstream oss;
        oss.fill('0');
    
        oss << date_time(system_clock::to_time_t(now));
        oss << '.' << setw(6) << us.count();
    
        return oss.str();
    }
    
    

    [图片上传失败...(image-498b8d-1642079908073)]

    相关文章

      网友评论

          本文标题:C++ 获取当前日期精确到毫秒的几种方法

          本文链接:https://www.haomeiwen.com/subject/vprocrtx.html