GNU/Linux >> Znalost Linux >  >> Linux

Získejte sekundy od epochy v Linuxu

V C.

time(NULL);

V C++.

std::time(0);

A návratová hodnota času je:time_t ne dlouhé


Nativní funkce Linuxu pro získávání času je gettimeofday() [existují také některé další příchutě], ale tím získáte čas v sekundách a nanosekundách, což je více, než potřebujete, takže bych navrhoval, abyste i nadále používali time() . [Samozřejmě time() se implementuje voláním gettimeofday() někde v řadě - ale nevidím výhodu dvou různých částí kódu, které dělají přesně to samé - a pokud byste to chtěli, použili byste GetSystemTime() nebo něco podobného ve Windows [nejsem si jistý, že je to správný název, už to byla nějaká doba, co jsem programoval ve Windows]


Již jej používáte:std::time(0) (nezapomeňte #include <ctime> ). Nicméně, zda std::time ve skutečnosti vrací čas, protože epocha není specifikována ve standardu (C11, na který odkazuje standard C++):

7.27.2.4 The time funkce

Souhrn

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

Popis

Časová funkce určuje aktuální kalendářní čas. Kódování hodnoty není specifikováno. [důraz můj]

Pro C++, C++11 a novější poskytněte time_since_epoch . Nicméně před C++20 epocha std::chrono::system_clock byl v předchozích standardech nespecifikovaný, a proto možná nepřenosný.

Přesto v Linuxu std::chrono::system_clock bude obvykle používat Unix Time i v C++11, C++14 a C++17, takže můžete použít následující kód:

#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. Get Age Of Given File?

  2. Linux – Proč Linux Utils nepoužívají systémové volání k získání aktuálního času?

  3. Linux – jak získat čas nástěnných hodin běžícího procesu?

  1. Získat čas vytvoření/vytvoření souboru??

  2. Získejte aktuální čas v sekundách od epochy na Linuxu, Bash

  3. Stavy procesu Linuxu

  1. Rychlejší spouštění Linuxu

  2. Jak zjistit čas zahájení dlouhotrvajícího linuxového procesu?

  3. Převeďte datum ISO na sekundy od epochy v linux bash