Tabla de contenido
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
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