• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kod w C++ jak pobrać czas systemowy?

0 głosów
6,324 wizyt
pytanie zadane 15 listopada 2015 w C i C++ przez ryszardm55 Nowicjusz (180 p.)
edycja 15 listopada 2015 przez ryszardm55
Chciałbym napisać aplikacje w builderze zegarka, który by wskazywał czas różniący się nieco (parę minut) od biężacego czasu w komputerze.

Nie mogłem znależć kodu jak pobierać biężacy czas systemu i umieścić w 3 zmiennych godzin, minut i sekund.

Próbowałem trochę z struct tm nazwa_struktury, ale jakoś nie chciało mi działać.

Nie wiem dokładnie, gdzie umieścić ten, czy tuż na początku formy tego zegarka (form z label1 wskazującym czas)?

Robię taki zegarek na moje potrzeby w pracy, gdzie czas w firmie różni sie parę minut od czasu rzeczywistego, i chciałbym go miec tez wyświetlony na swoim kompie, zeby wiedzieć,kiedy są przerwy i koniec pracy.

Dziękuję z góry za wszelka pomoc.

6 odpowiedzi

0 głosów
odpowiedź 15 listopada 2015 przez b00ny Mądrala (6,050 p.)

A nie łatwiej dodać bibliotekę time.h ?

komentarz 15 listopada 2015 przez ryszardm55 Nowicjusz (180 p.)
Dzięki, ale wiem, że należy dodać bibliotekę time.h, zeby moznaby używać funcje związane z czasem.
komentarz 16 listopada 2015 przez b00ny Mądrala (6,050 p.)
Łatwiej by było, jakbyś sprecyzował i dał kod :(
0 głosów
odpowiedź 15 listopada 2015 przez Dorion300 Szeryf (90,250 p.)
komentarz 15 listopada 2015 przez ryszardm55 Nowicjusz (180 p.)
Tak, ale naprawdę nie wiem, którą z tych funckji najlepiej zastosować, próbowałem parę, i rzadna nie działa mi, chyba, ze wstawiam ją w złym miejscu w builderze.
0 głosów
odpowiedź 15 listopada 2015 przez adrian17 Mentor (354,880 p.)

Mniej boleśnie, z boostem:

#include <iostream>
#include "boost/date_time/posix_time/posix_time_types.hpp" 

using namespace boost::posix_time;

int main(){
	ptime now = second_clock::local_time();

	std::cout << now.time_of_day().hours() << ":";
	std::cout << now.time_of_day().minutes() << ":";
	std::cout << now.time_of_day().seconds() << "\n";
}

 

komentarz 15 listopada 2015 przez ryszardm55 Nowicjusz (180 p.)
Nie rozumiem tego kodu. Skąd mam wziąść dołączony plik posix_time_types.hpp, który mam dołączyć?
komentarz 15 listopada 2015 przez adrian17 Mentor (354,880 p.)
To część zewnętrznej, bardzo znanej biblioteki Boost. Jeśli jesteś na Windowsie, trzeba ją pobrać, rozpakować i dodać jej folder do "include directories" kompilatora. Jeśli dopiero zaczynasz, nie wchodziłbym w to jeszcze.
0 głosów
odpowiedź 15 listopada 2015 przez Krawiec91 Pasjonat (19,600 p.)

Wykorzystać klasę TDateTime:
 

	TDateTime t = TDateTime::CurrentDateTime();
	double dt = 1.0/ (24 * 60) * 10;
	t += dt;
	Label1->Caption=t;

To obiektu klasy TDateTime o nazwie t przypisywany jest aktualny czas z użyciem metody CurrentDateTime(), można także użyć funkcji Now(). Zmienna do zmiennej dt przypisane jest 10 minutowe przesunięcie czasowe w postaci liczby zmiennoprzecinkowej. Następnie zostaje to dodane do aktualnego czasu i wyświetlone w Label1.

komentarz 15 listopada 2015 przez ryszardm55 Nowicjusz (180 p.)
Dzięki kolego za pomoc, ale nie zrozumiałeś mojego pytania. Jak chciałem pobrać czas i tylko czas (bez daty) i wstawić go do 3 oddzielnych zmiennych godzin, minut i sekund, żeby potem wyswiatlać je poprzez timer w builderze, oczywiście po wcześniejszym przesunięciu czasowym minut i sekund.
komentarz 15 listopada 2015 przez Krawiec91 Pasjonat (19,600 p.)
No trochę się zakręciłem. Ale wracając do tematu. Można by było zostać przy obiekcie klasy TDateTime, wykorzystać metodę CurrentTime() do pobrania aktualnego czasu, a następnie, aby rodzielić je na poszczególne kawałki (godziny, minuty, sekundy) użyć metody DecodeTime(). Po tych operacjach godziny, minuty,sekundy bedą w oddzielnych zmiennych typu unsigned short.
0 głosów
odpowiedź 15 listopada 2015 przez Radfler VIP (101,030 p.)

Jeżeli chcesz pobrać czas do struktury std::tm, to robimy to tak:

// Tworzymy zmienną typu std::time_t i przypisujemy do niej aktualny czas w sekundach
std::time_t timeInSeconds = std::time(nullptr);

// Teraz używając funkcji std::localtime pobieramy dane o aktualnym czasie do struktury std::tm
std::tm now = *std::localtime(&timeInSeconds);

Teraz z obiektu now możesz wyjmować dane o godzinach, minutach, dniach itp. Aby to działało musisz zainkludować bibliotekę <ctime> (nie <time.h>).

http://en.cppreference.com/w/cpp/chrono/c/localtime

http://en.cppreference.com/w/cpp/chrono/c/tm

Pozdrawiam!

0 głosów
odpowiedź 15 listopada 2015 przez ryszardm55 Nowicjusz (180 p.)
edycja 15 listopada 2015 przez ryszardm55
Udało mi sie to w końcu zrobić samemu. Użyłem prostej funkcji time(NULL) zwracającej ilość sekund od 1970 roku, potem przeliczyłem to na godziny, minuty i sekundy.

Wcześniej źle wstawiałem ten kod, powinien byc wstawiony do TForm1::FormCreate(TObject *Sender)

Jeszcze muszę napisać kod, który umożliwy pamiętanie tej róznicy czasowej zapisując ją w jakis pliku tekstowym, a także wstawię proste menu do ustawiania ilosci minut i sekund, chyba zrobie to w nowej formie mającej dwa pola tekstowe dla tych 2 wartości, do ktorych będą wstawiane skorygowane wartości.
komentarz 15 listopada 2015 przez ryszardm55 Nowicjusz (180 p.)
edycja 16 listopada 2015 przez ryszardm55

Dziś przetestowałem działanie aplikacji i niestety zegarek z wykorzystaniem timera strasznie się spóźnia w stosunku do zegara komputera, w ciągu godziny nawet prawie minutę. Naprawdę nie wiem, dlaczego się tak dzieje, skoro timer opiera sie na czasie pobieranym z systemu?

Chciałbym wstawić tutaj dane swojego projektu, ale nie wiem jak dołączyć tutaj plik?

 

Podobne pytania

0 głosów
2 odpowiedzi 1,163 wizyt
0 głosów
1 odpowiedź 1,156 wizyt
pytanie zadane 13 listopada 2017 w C i C++ przez raryk 77 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 432 wizyt

93,720 zapytań

142,635 odpowiedzi

323,264 komentarzy

63,267 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...