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

Funkcja czasu w C/C++ niezależna od czasu systemowego

Aruba Cloud - Virtual Private Server VPS
+2 głosów
1,530 wizyt
pytanie zadane 28 sierpnia 2015 w C i C++ przez Benek Szeryf (93,070 p.)
Biblioteka standardowa <time.h> udostępnia funkcje gmtime() oraz localtime(), ale obie korzystają z ustawień systemowych. Czy jest możliwość otrzymania w C/C++ niezależnych wartości czasu? Chodzi mi o to, żeby zegar który tworzę, pokazywał takie same wartości dla użytkownika Szanghaju i Toronto, bazując na przykład na czasie uniwersalnym UT.

2 odpowiedzi

+3 głosów
odpowiedź 28 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)
Czas można równie dobrze pobierać z jakiegoś serwera - wtedy będziesz pewien, że na każdym komputerze masz tę samą wartość.
0 głosów
odpowiedź 28 sierpnia 2015 przez Benek Szeryf (93,070 p.)

Tak, oczywiście masz rację, ale właśnie program będzie działał na maszynie lokalnej, jak i na serwerze - taki dualizm. W każdym razie udało mi się dojść do pewnego rozwiązania. Otóż gmtime() nie tylko zależy od aktualnej godziny, ale także od sterfy czasowej - w sumie to dość oczywiste. Dla sterfy UT + 0 localtime() i gmtime() zwróci te same wartości, dla pozostałych stref wartości te będą różne. Czyli najważniejsze jest, by użytkownik miał ustawiony poprawnie czas systemowy i strefę. Wtedy nie będzie problemów.

Dodając jeszcze słowo komentarza, powyższa bibiloteka dostarcza funkcję time() zwracającą ilość sekund od 01.01.1970 r. Właśnie o niej myślałem, bo ( http://www.unixtimestamp.com/ ):

The unix time stamp is a way to track time as a running total of seconds. This count starts at the Unix Epoch on January 1st, 1970 at UTC. Therefore, the unix time stamp is merely the number of seconds between a particular date and the Unix Epoch. It should also be pointed out (thanks to the comments from visitors to this site) that this point in time technically does not change no matter where you are located on the globe. This is very useful to computer systems for tracking and sorting dated information in dynamic and distributed applications both online and client side.

Czyli ta funkcja nie zależy od czasu systemowego?

EDIT:

Tak, sprawdziłem, liczba sekund zależy od ustawienia zegara systemowego. Czyli nie ma wzorca czasu w komputerze w postaci niezależnego zegara, chociaż data i godzina w BIOS-ie jest podtrzymwana...

komentarz 28 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)

Tak, zależy. Jeśli będziesz miał na komputerze datę 1 stycznia 1970 roku, to ci wyjdzie raptem kilka tysięcy sekund smiley

komentarz 28 sierpnia 2015 przez Benek Szeryf (93,070 p.)
Właśnie sprawdziłem. Edytowałem wiadomość. Jestem zdziwiony, bo jak pisałem wyżej, czas jest w BIOS-ie podtrzymywany. Natomiast w pozostałych przypadkach komputer musi ufać, że człowiek dobrze ustawił zegar. Hm, zastanawiające czy tak na pewno powinno być.
komentarz 28 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)
I dlatego aplikacja powinna pobierać czas z zewnętrznego serwera (patrz wyżej).

Podobne pytania

0 głosów
2 odpowiedzi 366 wizyt
pytanie zadane 28 maja 2017 w C i C++ przez BinaryMan Stary wyjadacz (12,620 p.)
0 głosów
1 odpowiedź 750 wizyt
pytanie zadane 9 czerwca 2019 w C i C++ przez MegaaSoft Obywatel (1,430 p.)
0 głosów
1 odpowiedź 239 wizyt
pytanie zadane 17 kwietnia 2016 w C i C++ przez 0xf Dyskutant (8,180 p.)

93,324 zapytań

142,323 odpowiedzi

322,389 komentarzy

62,652 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...