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

相关推荐
敲敲敲-敲代码24 分钟前
游戏设计:推箱子【easyx图形界面/c语言】
c语言·开发语言·游戏
simple_ssn1 小时前
【C语言刷力扣】1502.判断能否形成等差数列
c语言·算法·leetcode
ahadee1 小时前
蓝桥杯每日真题 - 第10天
c语言·vscode·算法·蓝桥杯
好想有猫猫2 小时前
【51单片机】LCD1602液晶显示屏
c语言·单片机·嵌入式硬件·51单片机·1024程序员节
军训猫猫头2 小时前
35.矩阵格式的一到一百数字 C语言
c语言·算法
Mr_Xuhhh3 小时前
递归搜索与回溯算法
c语言·开发语言·c++·算法·github
爱吃生蚝的于勒5 小时前
C语言内存函数
c语言·开发语言·数据结构·c++·学习·算法
失落的香蕉8 小时前
C语言串讲-2之指针和结构体
java·c语言·开发语言
ChoSeitaku10 小时前
链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)
c语言·算法·链表
DdddJMs__13510 小时前
C语言 | Leetcode C语言题解之第557题反转字符串中的单词III
c语言·leetcode·题解