Co to jest czas (NULL) W C?

Poznaję kilka podstawowych funkcji C i napotkałem time(NULL) w niektórych podręcznikach.

Co to właściwie znaczy?
 42
Author: dmubu, 2011-09-26

8 answers

Możesz przekazać wskaźnik do time_t obiektu, który time wypełni się bieżącym czasem(a wartość zwracana jest taka sama, na którą wskazałeś). Jeśli przechodzisz NULL, po prostu go ignoruje i zwraca tylko nowy obiekt time_t, który reprezentuje bieżący czas.

 39
Author: jason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-26 03:02:00

Wywołanie time(NULL) zwraca bieżący czas kalendarzowy (sekundy od 1 stycznia 1970). Zobacz ten odnośnik Po szczegóły. Zwykle, jeśli przekazujesz wskaźnik do time_t zmienna , ta zmienna wskaże bieżący czas.

 25
Author: jonsca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 12:45:03

[odpowiedź skopiowana z duplikatu , teraz-usunięte pytanie .]

time() to bardzo stara funkcja. Sięga czasów, kiedy Język C nie miał nawet typu long. Dawno, dawno temu, jedynym sposobem na uzyskanie czegoś w rodzaju 32-bitowego typu było użycie tablicy dwóch int s -- i wtedy int s były 16-bitowe.

Więc zadzwoniłeś

int now[2];
time(now);

I wypełniał 32-bitowy czas do now[0] i now[1], 16 bitów na raz. (To wyjaśnia dlaczego druga funkcje związane z czasem, takie jak localtime i ctime, zwykle akceptują swoje argumenty czasowe za pomocą wskaźników.)

Później, dmr zakończył dodawanie long do kompilatora, więc możesz zacząć mówić

long now;
time(&now);

Później, ktoś zdał sobie sprawę, że byłoby przydatne, gdyby time() poszedł naprzód i zwrócił wartość, a nie tylko wypełniając ją za pomocą wskaźnika. Ale -- wsteczna kompatybilność jest cudowną rzeczą -- na korzyść całego kodu, który wciąż robił time(&now), time() funkcja musiała podtrzymywać argument wskaźnika. Dlatego-i dlatego kompatybilność wsteczna nie zawsze jest tak cudowna - jeśli używasz zwracanej wartości, nadal musisz podać NULL jako wskaźnik: {]}

long now = time(NULL);

(później, oczywiście, zaczęliśmy używać time_t zamiast zwykłego long Dla razy, tak, że na przykład, można go zmienić na typ 64-bitowy, unikając problemu y2.038k.)

[P. S. Nie jestem pewien czy zmiana z int [2] na long, a zmiana dodawania wartości zwracanej miała miejsce w różnych momentach; mogły mieć miejsce w tym samym czasie. Ale zauważ, że gdy czas był reprezentowany jako tablica, to miał być wypełniony przez wskaźnik, nie mógł być zwrócony jako wartość, ponieważ oczywiście funkcje C nie mogą zwracać tablic.]

 9
Author: Steve Summit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-06 22:08:10

Funkcja time zwraca bieżący czas (jako wartość time_t) w sekundach od pewnego punktu (w systemach uniksowych, od północy UTC 1 stycznia 1970) i zajmuje jeden argument, wskaźnik time_t, w którym przechowywany jest czas. Podanie NULL jako argumentu powoduje, że time zwraca czas jako normalną wartość zwracaną, ale nie przechowuje go nigdzie indziej.

 3
Author: jwodder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-26 03:02:22

Time : zwraca czas, jaki upłynął w sekundach od epoki 1 Jan 1970

 3
Author: Mob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-26 03:04:26
int main (void)
{   
    //print time in seconds from 1 Jan 1970 using c   
    float n = time(NULL);   
    printf("%.2f\n" , n);      
}      

To drukuje 1481986944.00 (w tej chwili).

 2
Author: k_clark.90,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-17 16:07:54

Należy zapoznać się z dokumentacją dla ctime. {[0] } Jest funkcją, która pobiera jeden parametr typu time_t * (Wskaźnik do obiektu time_t) i przypisuje mu bieżący czas. Zamiast przekazywać ten wskaźnik, Możesz również przekazać NULL, a następnie użyć zwracanej wartości time_t.

 1
Author: Mahmoud Al-Qudsi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-26 03:02:43

Możesz przekazać wskaźnik do time_t obiektu, w którym czas wypełni się bieżącym czasem(a wartość zwracana jest taka sama, na którą wskazałeś). Jeśli przechodzisz w NULL, po prostu go ignoruje i zwraca tylko nowy obiekt time_t, który reprezentuje bieżący czas.

Nb:time(&timer); jest równoważne timer = time(NULL);

 0
Author: Md. Al Amin Bhuiyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-08 05:52:15