如何获得与Python中相同的系统时间?

时间:2020-08-24 12:21:35

标签: c++

我正在使用一个在变量中使用time.time()函数的python程序,

currentTime = time.time()

现在我正在尝试用C ++编写相同的函数:

lastCallTime = std::time(nullptr);

不幸的是,返回值不相同,请确保不应100%相同,但是如果我没记错的话,它应该更接近。

from python return 1598271246.1680057

from c++ return 1598271273

在c ++中,我正在使用ctime库,chrono对此没有帮助,或者我使用不正确。

3 个答案:

答案 0 :(得分:2)

让我编译一个完整的答案:

由于某种原因,一个非常非常微小,我认为一个秒不是1秒而是0.99999999 ...秒。我不确定要解决的问题,但对于短期计算,它应该足够准确(例如14.9999999999999和15

对于长期计算,可能的解决方法是使用不同的库

PSChildPaneSpecifier

数字2:

// C++ program to find Current Day, Date 
// and Local Time 
#include<iostream> 
#include<ctime> 
using namespace std; 
int main() 
{ 
    // Declaring argument for time() 
    time_t tt; 
  
    // Declaring variable to store return value of 
    // localtime() 
    struct tm * ti; 
  
    // Applying time() 
    time (&tt); 
  
    // Using localtime() 
    ti = localtime(&tt); 
  
    cout << "Current Day, Date and Time is = " 
         << asctime(ti); 
  
  return 0; 
} 

数字3:

// CPP program to print current date and time 
// using time and ctime. 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
  
int main() 
{ 
    // declaring argument of time() 
    time_t my_time = time(NULL); 
  
    // ctime() used to give the present time 
    printf("%s", ctime(&my_time)); 
    return 0; 
} 

另一个可能的原因是:飞跃秒数

UTC基于世界各地许多原子钟。这些时钟比地球的旋转和运动更为精确,因此有时会不时增加leap秒或其他各种事情。由于1970年是相当可惜的一刻,所以必定要增加一些。

参考:https://www.geeksforgeeks.org/print-system-time-c-3-different-ways/

答案 1 :(得分:2)

尝试一下:

auto lastCallTime = system_clock::now().time_since_epoch()/1.0s;

lastCallTime的类型为long double,并将包含小数秒。

答案 2 :(得分:0)

正如Omer推测的那样,这确实是一个leap秒问题。

根本原因是现实世界使用leap秒,但是POSIX的想法“自1-1-1970起的秒数没有。我故意将其写为1-1-1970,而不是1970的ISO表示法-01-01,因为ISO日期是真实的日期,包括real秒。

这将为您提供1970和2020之间准确的+27 leap秒差。剩余的4秒钟丢失可能是由于时钟不精确所致。您的PC可能有多个时钟。 C ++甚至承认这一点。 std::chrono::system_clockstd::chrono::high_resolution_clock并存,并且值可能不同。