Resumen de métodos para obtener marcas de tiempo en C++

1. Método de adquisición de marca de tiempo a nivel del sistema

1.1 Cómo obtiene el sistema Windows el intervalo de tiempo

Descripción de la API
usando GetLocalTime en la plataforma Windows

VOID GetLocalTime(
    LPSYSTEMTIME lpSystemTime //address of system times structure
);

Descripción del parámetro:
• lpSystemTime: apunta a una variable definida por el usuario de tipo SYSTEMTIME que contiene información de fecha y hora, que se utiliza para guardar la información de hora obtenida por la función.
Esta función almacenará la información de tiempo del sistema obtenida en la estructura SYSTEMTIME

typedef struct _SYSTEMTIME
{
    
    
    WORD wYear;//年
    WORD wMonth;//月
    WORD wDayOfWeek;//星期,0为星期日,1为星期一,2为星期二……
    WORD wDay;//日
    WORD wHour;//时
    WORD wMinute;//分
    WORD wSecond;//秒
    WORD wMilliseconds;//毫秒
}SYSTEMTIME,*PSYSTEMTIME;

• Ejemplo de uso:

SYSTEMTIME stTime;
GetLocalTime(&stTime);
WORD wYear = stTime.wYear;
WORD wMonth = stTime.wMonth;
WORD wDay = stTime.wDay;
WORD wHour = stTime.wHour;
WORD wMinute = stTime.wMinute;
WORD wSecond = stTime.wSecond;
CString m_date;

//m_date cadena es la hora actual. Por ejemplo: 23 de abril de 2010 11:12:45

m_date.Format("%4d年%2d月%2d日 %2d:%2d:%2d", wYear, wMonth, wDay, wHour, wMinute, wSecond);

• Resultados de la
inserte la descripción de la imagen aquí

1.2 Cómo obtiene el sistema Linux el intervalo de tiempo

Use gettimeofday en la plataforma Linux

#include <sys/time.h>
int gettimeofday(struct timeval*tv, struct timezone *tz);

Su parámetro tv es una estructura que guarda el resultado horario obtenido, y el parámetro tz se usa para guardar el resultado de la zona horaria:

struct timezone{
    
    
    int tz_minuteswest;/*格林威治时间往西方的时差*/
    int tz_dsttime;/*DST 时间的修正方式*/
}

Si no se usa el parámetro de zona horaria, simplemente pase NULL.
La estructura timeval se define como:

struct timeval{
    
    
    long int tv_sec; // 秒数
    long int tv_usec; // 微秒数
}

El tiempo que obtiene tiene una precisión del orden de microsegundos (1e-6 s). Utilice gettimeofday antes y después de un fragmento de código para calcular el tiempo de ejecución del código:

struct timeval tv_begin, tv_end;
gettimeofday(&tv_begin, NULL);
foo();
gettimeofday(&tv_end, NULL);

La función devuelve 0 después de una ejecución exitosa y devuelve -1 después de una falla, y el código de error se almacena en errno.

1.3 Obtener marca de tiempo

código:

#ifdef _WIN32
#include <time.h>
#include <windows.h>
#else
#include <sys/time.h>
#endif

using namespace std;

unsigned long long GetCurrentTimeMsec()
{
    
    
#ifdef _WIN32
  struct timeval tv;
  time_t clock;
  struct tm tm;
  SYSTEMTIME wtm;
  GetLocalTime(&wtm);
  tm.tm_year = wtm.wYear - 1900;
  tm.tm_mon = wtm.wMonth - 1;
  tm.tm_mday = wtm.wDay;
  tm.tm_hour = wtm.wHour;
  tm.tm_min = wtm.wMinute;
  tm.tm_sec = wtm.wSecond;
  tm.tm_isdst = -1;
  clock = mktime(&tm);
  tv.tv_sec = clock;
  tv.tv_usec = wtm.wMilliseconds * 1000;
  return ((unsigned long long)tv.tv_sec * 1000 + (unsigned long long)tv.tv_usec / 1000);
#else
  struct timeval tv;
  gettimeofday(&tv, NULL);
  return ((unsigned long long)tv.tv_sec * 1000 + (unsigned long long)tv.tv_usec / 1000);
#endif
}

2. lenguaje C++ para obtener la marca de tiempo

c ++ 11 tiene una clase crono para obtener marcas de tiempo

#include <chrono>

time_t GetCurrentTimeMsec(){
    
    
	auto time = chrono::time_point_cast<chrono::milliseconds>(chrono::system_clock::now());
	time_t timestamp = time.time_since_epoch().count();
	return timestamp;
}

Referencia: https://developer.aliyun.com/article/1171304

Supongo que te gusta

Origin blog.csdn.net/wyw0000/article/details/130144478
Recomendado
Clasificación