Odmierzanie czasu

Odmierzanie czasu
Krzysztof Miller
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:10
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ś

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

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

edytowany 1x, ostatnio: kq
RE
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 7 godzin
2

We are the 4p. Existence, as you know it, is over. We will add your biological and technological distinctiveness to our own. Resistance is futile
kq
Nie wiem czy to ma sens przed C++20
RE
@kq: nie używam chrono ale nie dało by się tego zrobić na time_point? daty wpisać za pomocą from_time_t i obliczyć różnicę tyle że to będzie liczba sekund od 1970. Ale i to da się przełożyć w drugą stronę. To już w c++11 jest.
kq
No tak, ale skądś to time_t musisz mieć, a jak już masz to łatwiej użyć po prostu -
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Szczecin
3

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

Kopiuj
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


RE
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 7 godzin
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

Kopiuj
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).


We are the 4p. Existence, as you know it, is over. We will add your biological and technological distinctiveness to our own. Resistance is futile
edytowany 2x, ostatnio: revcorey
plx211
  • Rejestracja:ponad 11 lat
  • Ostatnio:3 miesiące
  • Postów:181
0

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

Kopiuj
#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;	
}
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 21 godzin
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ż.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.