C语言 获取系统时间

获取系统时间的函数

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 库中的函数一起使用,例如 localtimegmtime,这些函数可以将一个时间戳转换为 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 结构体。例如,你可以将一个时间戳转换为本地时间,然后提取其中的年、月、日等信息。

相关推荐
cdg==吃蛋糕8 小时前
selenium webdriver使用
c语言·selenium·测试工具
眸生8 小时前
至此(day1-day4)代码详解(ai辅助整理)
c语言·汇编·操作系统·计算机组成原理·显存·i/o外设
xiecoding.cn8 小时前
string在c语言中代表什么(非常详细)
c语言·string·c语言string·c语言string.h·string.h头文件
whoarethenext9 小时前
c/c++的opencv均值模糊
c语言·c++·opencv
AI+程序员在路上14 小时前
C及C++的音频库与视频库介绍
c语言·c++·音视频
KeithTsui14 小时前
C语言之 比特(bit)、字节(Byte)、字(Word)、整数(Int)
linux·c语言·开发语言·c++·算法·word
梁下轻语的秋缘18 小时前
每日c/c++题 备战蓝桥杯(洛谷P1440 求m区间内的最小值 详解(单调队列优化))
c语言·c++·蓝桥杯
林开落L20 小时前
C语言:基础篇之常见概念
c语言·开发语言
一匹电信狗20 小时前
【数据结构】队列的完整实现
c语言·数据结构·c++·算法·leetcode·排序算法·visual studio
tadus_zeng21 小时前
C/C++ 整数类型的长度
c语言·开发语言·c++