C语言获取系统时间

摘要:在Python中获取系统时间,文件输出,省的文件名冲突,或者输出系统时间便于查看。现在主要用C语言了,所以也去看看C语言怎么获取系统时间,主要是获取格林尼治时间,而后转化为东八区时间,代码经过了月底转换月份,闰年变为2月29等测试。

1.代码

1.1 头文件

VS里面要加第一句

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>

1.2 获取系统时间函数


void NowTimeString(char* TimeString)
{
	int day_list[2][12] = { 
		{31,28,31,30,31,30,31,31,30,31,30,31},
		{31,29,31,30,31,30,31,31,30,31,30,31} 
						};
	char day_list_index = 0;//默认不是闰年
	time_t timep;
	time(&timep);
	struct tm* p;
	p = gmtime(&timep);
	
int year = 1900 + p->tm_year;
	int month = 1 + p->tm_mon;
	int day = (8 + p->tm_hour) / 24 + p->tm_mday;
	int hour =(8 + p->tm_hour) % 24;
	if ((8 + p->tm_hour) / 24 > 0)//大于0,说明小时大于24小时,
		//此时主要是对于天,月,年的处理,小时本身可以处理好
	{
		if ((month == 2 && p->tm_mday ==28) && (year % 400 == 0 || (year % 4 == 0 && year % 100 == 0)))
			//伦敦当前是2月28,并且是闰年的情况下,原先是2月28,加了才回超出
			day_list_index = 1;
		
		if (day > day_list[day_list_index][p->tm_mon])
		{
			if (month == 12 && p->tm_mday == 31)//伦敦时间12月31日,+8会变更年
			{
			
				year += 1;
				month = 1;
				day = 1;
			}
			else
			{
				month += 1;
				day = 1;
			}
			
		}
	}
	sprintf(TimeString,"%04d_%02d_%02d %02d_%02d_%02d", year, month
		, day, hour, p->tm_min, p->tm_sec);
	//printf("%d\n", p->tm_sec);         /*获取当前秒*/
	//printf("%d\n", p->tm_min);         /*获取当前分*/
	//printf("%d\n", 8 + p->tm_hour);    /*获取当前时,这里获取西方的时间,刚好相差八个小时*/
	//printf("%d\n", p->tm_mday);        /*获取当前月份日数,范围是1-31*/
	//printf("%d\n", 1 + p->tm_mon);     /*获取当前月份,范围是0-11,所以要加1*/
	//printf("%d\n", 1900 + p->tm_year); /*获取当前年份,从1900开始,所以要加1900*/
	//printf("%d\n", p->tm_yday);        /*从今年1月1日算起至今的天数,范围为0-365*/
	//return TimeString;
}

1.3 main函数


int main()
{
	
	char TimeString[30];
	NowTimeString(TimeString);
	printf(TimeString);
	return 0;
}

1.4 结果

在这里插入图片描述

2. 问题

  1. 将上述函数移植到嵌入式里面,keil MDK,stm32f103,C语言识别不了time.h里面定义的struct tm结构体,暂时没有时间去探究了,有知道的小伙伴告诉我一声感谢

参考文献

博客
该参考文献没有考虑格林尼治时间+8以后可能对小时,天和年的影响,以及闰年的影响。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值