GNU/Linux >> Linux Esercitazione >  >> Linux

Ottieni secondi dall'epoca in Linux

In C.

time(NULL);

In C++.

std::time(0);

E il valore di ritorno di time è :time_t non lungo molto


La funzione nativa di Linux per ottenere l'ora è gettimeofday() [ci sono anche altri gusti], ma questo ti dà il tempo in secondi e nanosecondi, che è più di quanto ti serve, quindi ti suggerirei di continuare a usare time() . [Certo, time() è implementato chiamando gettimeofday() da qualche parte lungo la linea - ma non vedo il vantaggio di avere due diversi pezzi di codice che fanno esattamente la stessa cosa - e se lo volessi, useresti GetSystemTime() o qualcosa del genere su Windows [non sono sicuro che sia il nome giusto, è passato un po' di tempo dall'ultima volta che ho programmato su Windows]


Lo stai già utilizzando:std::time(0) (non dimenticare di #include <ctime> ). Tuttavia, se std::time in realtà restituisce il tempo da quando epoch non è specificato nello standard (C11, a cui fa riferimento lo standard C++):

7.27.2.4 L'time funzione

Sinossi

#include <time.h>
time_t time(time_t *timer);

Descrizione

La funzione dell'ora determina l'ora corrente del calendario. La codifica del valore non è specificata. [sottolineatura mia]

Per C++, C++11 e versioni successive forniscono time_since_epoch . Tuttavia, prima del C++20 l'epoca di std::chrono::system_clock non era specificato e quindi probabilmente non portabile negli standard precedenti.

Tuttavia, su Linux il std::chrono::system_clock userà solitamente Unix Time anche in C++11, C++14 e C++17, quindi puoi usare il seguente codice:

#include <chrono>

// make the decltype slightly easier to the eye
using seconds_t = std::chrono::seconds;

// return the same type as seconds.count() below does.
// note: C++14 makes this a lot easier.
decltype(seconds_t().count()) get_seconds_since_epoch()
{
    // get the current time
    const auto now     = std::chrono::system_clock::now();

    // transform the time into a duration since the epoch
    const auto epoch   = now.time_since_epoch();

    // cast the duration into seconds
    const auto seconds = std::chrono::duration_cast<std::chrono::seconds>(epoch);
    
    // return the number of seconds
    return seconds.count();
}

Linux
  1. Linux:perché gli utenti Linux non utilizzano una chiamata di sistema per ottenere l'ora corrente?

  2. Linux:come ottenere l'ora dell'orologio da parete di un processo in esecuzione?

  3. Ottieni l'ora corrente in secondi da Epoch su Linux, Bash

  4. Come ottenere l'ora di inizio di un processo Linux di lunga durata?

  5. Spegnimento di Linux in 30 secondi?

Come testare la velocità di caricamento del sito Web nel terminale Linux

Comando dell'ora di Linux

Ottieni informazioni sulla CPU su Linux

Ultimo comando in Linux

Controlla il fuso orario in Linux

Come ottenere il tuo indirizzo IP su Linux