Odmierzanie czasu

0

Potrzebuje obliczyć ile sekund (albo minut lub godzin, obojętnie) upłynęło od 06.05.2020 i zapisać to do jakiegoś int'a, szukam i nic ciekawego znaleźć nie potrafię. Sam wpadłem tylko na jeden pomysł i zrobiłem to strasznie źle, obliczyłem ile sekund minęło od 1.01.1970 a potem na kalkulatorze w internecie obliczyłem ile minut minęło od 1.01.1970 do 06.05.2020 i odjąłem od wyniku, wyszło takie coś

sekundy = time( NULL );
minuty=sekundy/60-26478600;

Ktoś ma jakiś pomysł żeby zrobić to po ludzku? Z góry dzięki

2

zacznij od przejrzenia
https://en.cppreference.com/w/cpp/chrono

3

Przed C++20 musisz użyć time.h:

int main()
{
    std::tm t{};
    t.tm_mday = 5;
    t.tm_mon = 4;
    t.tm_year = 2020 - 1900;
    auto unix_time = std::mktime(&t);
    DBG(unix_time);
    DBG(time(nullptr));
    DBG(time(nullptr) - unix_time);
}

https://wandbox.org/permlink/AEnGBvgb9nFDKcal

1

Wracając do rozmowy o time_t widze taki przykład na stacku https://stackoverflow.com/questions/21021388/how-to-parse-a-date-string-into-a-c11-stdchrono-time-point-or-similar

std::tm tm = {};
std::stringstream ss("Jan 9 2014 12:35:34");
ss >> std::get_time(&tm, "%b %d %Y %H:%M:%S");
auto tp = std::chrono::system_clock::from_time_t(std::mktime(&tm));

A że on zna konkretną datę od której chce liczyć, to da radę to zrobić tym co jest od c++11 już. Oczywiście musi w tym pogrzebać jeszcze ale coś tam się da na chrono wyklepać(+mktime).

0

nie sądziłem że będę musiał trochę poszukać aby to napisać :)

#include <iostream>
#include <chrono>
#include <ctime>

int main() {
	std::tm tmp = {
		0, // sec
		0, // min
		0, // h
		26, // d
		5 - 1, // m
		2020 - 1900, // y
	};
	
	auto tmp2 = std::mktime(&tmp);
	
	if (tmp2 == -1) {
		std::cerr << "Error with casting data to time";
		return 1;
	}
	
	auto data = std::chrono::system_clock::from_time_t(tmp2);
	auto now = std::chrono::system_clock::now();
	
	std::cout
		<< "S: " << std::chrono::duration_cast<std::chrono::seconds>(now - data).count() << "\n"
		<< "M: " << std::chrono::duration_cast<std::chrono::minutes>(now - data).count() << "\n"
		<< "H: " << std::chrono::duration_cast<std::chrono::hours>(now - data).count() << "\n";

	return 0;	
}
0

http://www.cplusplus.com/reference/ctime/time/

tu masz przykład na seconds since January 1, 2000 in the current timezone. zmień sobie datę początkową i już.

1 użytkowników online, w tym zalogowanych: 0, gości: 1