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

相关推荐
inrichtt3 小时前
第八课时:SPI总线揭秘:四线全双工通信的奥
c语言·数据结构·stm32·单片机·嵌入式硬件
wuminyu6 小时前
JMM学习总结:深入理解happens-before关系
java·linux·c语言·jvm·c++
Zwawa8 小时前
让电机走到指定位置:编码器位置环 PID
c语言·单片机·嵌入式
fensnote9 小时前
西门子 S7 PLC 内部寄存器读写 Demo(C 语言)
c语言·开发语言
Logic10112 小时前
C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
dear_bi_MyOnly12 小时前
栈和队列:从原理到应用全解析
c语言·开发语言·c++·学习·分类
从小白到软工13 小时前
4-3 项目-学生成绩管理系统(上)
c语言·开发语言·数据结构·经验分享·ai编程
Code_Solitude14 小时前
c语言:指针(3)+冒泡排序
java·c语言·算法
巴巴媛66615 小时前
【Debug1】程序死机,while(1)循环,怎么办?
c语言·笔记·stm32·嵌入式硬件·bug
Lxx_Zw15 小时前
PID 用顺了,然后呢:增强手术与前馈
c语言·stm32·单片机·嵌入式硬件