我正在使用一个在变量中使用time.time()函数的python程序,
currentTime = time.time()
现在我正在尝试用C ++编写相同的函数:
lastCallTime = std::time(nullptr);
不幸的是,返回值不相同,请确保不应100%相同,但是如果我没记错的话,它应该更接近。
from python return 1598271246.1680057
和
from c++ return 1598271273
在c ++中,我正在使用ctime库,chrono对此没有帮助,或者我使用不正确。
答案 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_clock
和std::chrono::high_resolution_clock
并存,并且值可能不同。