为什么Ubuntu获取的时间会有秒跳?

为什么Ubuntu获取的时间会有秒跳?

背景: 我想使用系统函数获取UTC来添加时间戳。函数sgetdayoftime()可以帮助获取纪元时间(从1970-1-1开始),另一个函数localtime_r可以帮助将纪元时间更改为UTC。我写了一个简单的程序来测试时间获取的稳定性。但结果出现了秒数跳动的情况。

环境: Ubuntu 16.04 安装在 Win 10(1903)中的 Vmware Workstation 15.1 中。该程序在 C++ 中运行。

问题: 我使用matlab分析时间差异,结果如下:

在此处输入图片描述

代碼: 代码非常简单。

#include <sys/time.h>
#include <iostream>
#include <time.h>
#include <fstream>
#include <unistd.h>

using namespace std;

int main(int argc, char **argv)
{
    int cnt=0;

    ofstream fp("time.txt");
    
    //For getting the UTC
    struct timeval epochTime;
    struct tm timenow;

    while(1)
    {
        //Get the UTC
        gettimeofday(&epochTime, NULL); 
        localtime_r(&epochTime.tv_sec, &timenow);
        
        //Write time to txt
        fp<<cnt<<","<<timenow.tm_year + 1900<<"-"<<timenow.tm_mon + 1<<"-"<<timenow.tm_mday<<
            " "<<timenow.tm_hour<<":"<<timenow.tm_min<<":"<<timenow.tm_sec<<"."<<epochTime.tv_usec<<endl;

        //sleep for test
        usleep(10000);
 
        if(cnt > 1000)
        {
            return 1;
        }
        cout << cnt << endl;
        cnt +=1;

    }
    return 1;
}

相关内容