我有以下几种情况:我正在编写两个程序,第一个程序从windows开始,在一个文本文档中写入当前的系统时间。 其代码如下所示:
auto start = std::chrono::system_clock::now();
std::time_t start_time = std::chrono::system_clock::to_time_t(start);
ofstream Write ("Time.txt");
Write << std::ctime(&start_time);
日期格式如下:Thu Jul 16 14:19:53 2020。
我的第二个程序在关机时自动启动。 它应该构建当前系统时间和开始时间之间的差异,并将该差异写入不同的文本文档中。
#include <iostream>
#include <ctime>
#include <string>
#include <cmath>
#include <fstream>
#include <chrono>
#include <windows.h>
using namespace std;
double k; //Get leftover time from txt doc//
int s; //Seconds//
int m; //Minutes//
int h; //Hours//
int d; //Days//
long int z; //Var containing new leftover time//
int main()
{
ifstream Time ("Time.txt");
Time >> start;
//Get starting time//
ifstream Check ("Test.txt");
Check >> d; //Reading days from txt doc to d//
Check >> h; //Reading hours from txt doc to h//
Check >> m; //Reading minutes from txt doc to m//
Check >> s; //Reading seconds from txt doc to s//
k = (s + 60*m + 3600*h + 24*3600*d);
auto end = std::chrono::system_clock::now();
//Get current time ending the program//
std::chrono::duration<double> elapsed_seconds = end-start;
//Calculate difference between start and end//
z = (k-round(elapsed_seconds.count()));
//Calculate time difference in seconds//
//Converting seconds into days, hours, minutes, seconds//
d = z / (24*3600);
h = (z / 3600) % 24;
m = (z / 60) % 60;
s = z % 60;
//End of converting//
ofstream Write ("Test.txt");
Write << d << "\n" << h << "\n" << m << "\n" << s;
//Write all values back to txt doc//
}
我遇到的问题是,我不知道如何从time.txt中获取开始时间,其格式可以用于这个chrono操作std::chrono::duration<;double>; elapsed_seconds=End-Start
。
我试着在启动程序中设置它
std::time_t start_time = std::chrono::system_clock::to_time_t(start);
ifstream Time ("Time.txt");
Time >> start;
结果是:test.txt中出现了一个荒谬的负数,这显然是错误的,因为我没有搞乱系统时间。
一个字符串变量也帮不了我多少忙。 它完成了将txt行复制到string变量的工作,但是后来我没能将它转换成正确的chrono变量。
我希望有人对如何做到这一点有个主意。 我已经感谢你的回答了。
为什么把时间作为字符串写入文件? std::time_t
是算术类型。 你可以直接写和读
#include <iostream>
#include <fstream>
#include <ctime>
#include <chrono>
#include <thread>
using std::literals::chrono_literals::operator""s;
int main() {
{
auto start = std::chrono::system_clock::now();
std::time_t start_time = std::chrono::system_clock::to_time_t(start);
std::ofstream file("file.txt");
file << start_time;
std::cout << start_time << '\n';
}
std::this_thread::sleep_for(3s);
{
std::time_t start_time;
std::ifstream file("file.txt");
file >> start_time;
std::cout << start_time << '\n';
auto start = std::chrono::system_clock::from_time_t(start_time);
auto end = std::chrono::system_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::seconds>(end-start).count();
}
}