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

相关推荐
Zer0_on6 分钟前
数据结构栈和队列
c语言·开发语言·数据结构
一只小bit6 分钟前
数据结构之栈,队列,树
c语言·开发语言·数据结构·c++
马浩同学44 分钟前
【GD32】从零开始学GD32单片机 | DAC数模转换器 + 三角波输出例程
c语言·单片机·嵌入式硬件·mcu
一个没有本领的人1 小时前
win11+matlab2021a配置C-COT
c语言·开发语言·matlab·目标跟踪
一只自律的鸡1 小时前
C项目 天天酷跑(下篇)
c语言·开发语言
长安——归故李2 小时前
【C语言】成绩等级制
c语言·开发语言
青い月の魔女3 小时前
数据结构初阶---二叉树
c语言·数据结构·笔记·学习·算法
最后一个bug4 小时前
STM32MP1linux根文件系统目录作用
linux·c语言·arm开发·单片机·嵌入式硬件
FeboReigns4 小时前
C++简明教程(4)(Hello World)
c语言·c++
FeboReigns4 小时前
C++简明教程(10)(初识类)
c语言·开发语言·c++