获取系统时间的函数
c
#define _TIMEBUFLEN (40) // 获取日志缓冲需要的大小
void GetSysTime(char* pTimeBuf, u32 dwSize)
{
if (pTimeBuf == NULL)
{
return;
}
#if defined(_MSC_VER)
SYSTEMTIME sys = { 0 };
GetLocalTime(&sys);
sprintf_s(pTimeBuf, dwSize, "%4d-%02d-%02d %02d:%02d:%02d", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond);
#else
time_t timer;
struct tm* ptTm = NULL;
time(&timer);
ptTm = localtime(&timer);
if (ptTm)
{
snprintf(pTimeBuf, dwSize, "%4d-%02d-%02d %02d:%02d:%02d", ptTm->tm_year + 1900, ptTm->tm_mon + 1, ptTm->tm_mday,
ptTm->tm_hour, ptTm->tm_min, ptTm->tm_sec);
}
#endif
}
这段代码是一个用于获取系统时间的函数。它接受一个字符指针 pTimeBuf
和一个无符号整数 dwSize
作为参数。函数首先检查 pTimeBuf
是否为空,如果为空则直接返回。
接下来,根据不同的编译器环境,使用不同的方法来获取系统时间。在 Microsoft Visual C++ 环境下,使用 GetLocalTime
函数获取当前系统时间,并将其存储在 SYSTEMTIME
结构体中。然后使用 sprintf_s
函数将时间信息格式化为字符串,并存储在 pTimeBuf
指向的缓冲区中。
在其他编译器环境下,使用 time
函数获取当前时间戳,并使用 localtime
函数将其转换为本地时间。然后使用 snprintf
函数将时间信息格式化为字符串,并存储在 pTimeBuf
指向的缓冲区中。
最终,函数将格式化后的时间字符串存储在 pTimeBuf
指向的缓冲区中,长度不超过 dwSize
。
相关知识
- GetLocalTime是一个Windows API函数,用于获取当前系统的本地时间。它的原型如下:
c
VOID WINAPI GetLocalTime(
LPSYSTEMTIME lpSystemTime
);
参数:
- lpSystemTime:指向一个SYSTEMTIME结构体的指针,该结构体将被填充为当前系统的本地时间。
返回值:无
示例代码:
c
#include <windows.h>
#include <stdio.h>
int main()
{
SYSTEMTIME st;
GetLocalTime(&st);
printf("当前本地时间: %04d-%02d-%02d %02d:%02d:%02d
", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
return 0;
}
-
time_t
是C语言中表示时间的数据类型,通常用于存储从1970年1月1日(称为UNIX纪元)到当前时间的秒数。它通常用于处理日期和时间相关的操作。 -
struct tm
是 C 语言中定义的一个结构体,用于表示日期和时间。它通常与time.h
库中的函数一起使用,例如localtime
或gmtime
,这些函数可以将一个时间戳转换为struct tm
结构体。
struct tm
的定义如下:
c
struct tm {
int tm_sec; // 秒 - 取值区间为[0,59]
int tm_min; // 分 - 取值区间为[0,59]
int tm_hour; // 时 - 取值区间为[0,23]
int tm_mday; // 一个月中的日期 - 取值区间为[1,31]
int tm_mon; // 月份(从0开始,0代表1月) - 取值区间为[0,11]
int tm_year; // 年份,其值等于实际年份减去1900
int tm_wday; // 星期几(从0开始,0代表星期天) - 取值区间为[0,6]
int tm_yday; // 一年中的天数(从0开始) - 取值区间为[0,365]
int tm_isdst; // 夏令时标识符,正数代表使用夏令时,负数代表未使用,0代表不确定
};
当你需要处理日期和时间相关的操作时,可以使用 struct tm
结构体。例如,你可以将一个时间戳转换为本地时间,然后提取其中的年、月、日等信息。