获取系统时间GetSystemTime、GetLocalTime、GetTickTime

本文介绍了Windows系统中获取时间的几个关键函数,包括GetSystemTime用于获取UTC时间,GetLocalTime用于获取当地时间,并提到了SetLocalTime用于设置系统时间。此外,还讨论了GetTickTime和GetTickTime64,它们分别用于获取系统开机以来的毫秒时间,需要注意超过50天后时间会重置的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在说时间之前先说一个经常要用的时间结构体,Linux中与windows一样
SYSTEMTIME 结构体

typedef struct _SYSTEMTIME {
    WORD wYear;
    WORD wMonth;
    WORD wDayOfWeek;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSecond;
    WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;

GetSystemTime是获取系统时间,UTC时间,其实是格林威治时间
GetLocalTime是获取当地时间,在格林威治时间上加上了东八区,就是增加了8小时的中国时区
SetLocalTime(LPSYSTEMTIME lpSystemTime)是设置系统时间

VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);   //本地时间
VOID GetSystemTime(LPSYSTEMTIME lpSystemTime); //格林威治时间

参数说明:
lpSystemTime: 指向一个用户自定义包含日期和时间信息的类型为 SYSTEMTIME 的变量,该变量用来保存函数获取的时间信息。

GetTickTime()获取系统开机到现在的时间,以毫秒计算 2^32-1 = 42,9496,7295ms /1000ms/3600s/24h=49.710days=1.6month
如果时间超过50天,那么时间就要重新开始
GetTickTime64()是64位的
返回值是ULONGLONG表示的时间会很大

下过是我做的一个例子

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#define TOTAL 100000

int compare(const void* a,const void* b)
{
	return *(int*)a - *(int*)b;
}

int main()
{
	DWORD time1 = 0;
	DWORD time2 = 0;

	SYSTEMTIME st;
	GetLocalTime(&st);

	printf("Local time:%d-%d-%d %d:%d:%d %dms\n",
		st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond,st.wMilliseconds);

	GetSystemTime(&st);
	printf("system time:%d-%d-%d %d:%d:%d %dms\n",
		st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond,st.wMilliseconds);
	
	//Sleep(1000);

	st.wHour += 1;
	SetSystemTime(&st);
	
	time2 = GetTickCount();
	printf("start time:%d\n",time2);

	int nums[TOTAL];

	srand(GetTickCount());
	int index;
	for(index = 0; index < TOTAL;index++)
	{
		nums[index] = rand() % TOTAL;
		//printf("%d->>%d\n",index,nums[index]);
	}

	qsort(nums,TOTAL,sizeof(nums[0]),compare);

	//for(index = 0; index < TOTAL;index++)
	//{
		//nums[index] = rand() % TOTAL;
		//printf("%d->>%d\n",index,nums[index]);
	//}

	time1 = GetTickCount();
	printf("end time:%d\n",time1);

	printf("running time:%d ms\n",time1 - time2);
	

	return 0;
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值