0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言_标准时间与秒单位的转换

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-08-14 09:49 次阅读

这篇文章介绍 标准时间与秒单位,秒单位与标准时间的转换方式,这份代码一般用在嵌入式单片机里比较多,比如:设置RTC时钟的时间,从RTC里读取秒单位时间后,需要转换成标准时间显示。

下面列出的两个例子里,注释和思路都写了,思路和实现办法在代码注释里。

1. 时间转换-秒与标准时间的转换

1.时间转换(秒与标准时间的转换)
(1)函数1: 将秒单位时间转为标准时间。 --RTC实时时钟—>秒为单位—>每秒钟cnt++;
237562867493 -----xxxx年xx月xx日xx时xx分xx秒 星期x。

示例代码: (模拟电子钟)

#include 
#include   //字符串处理
#include  

//时间单位
int year,mon,mdeay,hour,min,t_sec;

//闰年的月份
int mon_r[12]={31,29,31,30,31,30,31,31,30,31,30,31};

//平年的月份
int mon_p[12]={31,28,31,30,31,30,31,31,30,31,30,31};

unsigned int TimeToSec(int year,int mon,int mdeay,int hour,int min,int sec);
void SecToTime(unsigned int sec);
int main(void)
{
	//将标准时间转为秒单位时间  (设置时间)
	unsigned int time=TimeToSec(2018,6,6,16,40,20);
	
	while(1)
	{
		time++;
		Sleep(1000); //睡眠1秒时间。 单位是ms
		SecToTime(time);
		printf("%d-%d-%d %d:%d:%d\n",year,mon,mdeay,hour,min,t_sec);
	}
	return 0;
}

/*
函数功能: 判断平年和闰年
函数返回值: 1表示闰年  0表示平年
*/
int GetYearStat(int year)
{
	if((year%4==0&&year%100!=0)||year%400==0)return 1; //闰年
	return 0; //平年
}

/*
将秒单位时间转为标准时间
时间基准点: 1970年1月1日0时0分0秒
思想: 减法
*/
void SecToTime(unsigned int sec)
{
	int i;
	year=1970; //基准年份
	/*1. 计算过了多少年*/
	while(sec>=365*24*60*60) //秒还够一年
	{
		if(GetYearStat(year)) //闰年
		{
			if(sec>366*24*60*60)
			{
				sec-=366*24*60*60; //减去一年
				year++; //年份累加
			}
			else
			{
				break;
			}
		}
		else
		{
			sec-=365*24*60*60; //减去一年
			year++; //年份累加
		}
	}

	/*2. 计算过了多少月*/
	mon=1;
	if(GetYearStat(year)) //闰年
	{
		for(i=0; i<12; i++)
		{
			if(sec>=mon_r[i]*24*60*60) //够一个月
			{
				sec-=mon_r[i]*24*60*60; //减去一个月
				mon++;//增加一个月
			}
			else break;
		}
	}
	else
	{
		for(i=0; i<12; i++)
		{
			if(sec>=mon_p[i]*24*60*60) //够一个月
			{
				sec-=mon_p[i]*24*60*60; //减去一个月
				mon++;//增加一个月
			}
			else break;
		}
	}
	
	/*3. 计算过了多少天*/
	mdeay=1;
	while(sec>=24*60*60) //判断是否够一天
	{
		sec-=24*60*60;
		mdeay++;
	}

	/*4. 过了多少小时*/
	hour=0;
	while(sec>=60*60)
	{
		sec-=60*60;
		hour++;
	}
	/*5. 过了多少分钟*/
	min=0;
	while(sec>=60)
	{
		sec-=60;
		min++;
	}
	/*6. 过了多少秒*/
	t_sec=sec; 
}

/*
将标准时间转为秒单位时间
思路: 全程加法
时间基准点: 1970年1月1日0时0分0秒
返回值: 得到的秒单位时间
*/
unsigned int TimeToSec(int year,int mon,int mdeay,int hour,int min,int sec)
{
	int i;
	int sec_cnt=0; //记录秒单位的时间
	/*1. 转换年*/
	for(i=1970; i
#include   //字符串处理
#include  

//时间单位
int year,mon,mdeay,hour,min,t_sec,week;

//闰年的月份
int mon_r[12]={31,29,31,30,31,30,31,31,30,31,30,31};

//平年的月份
int mon_p[12]={31,28,31,30,31,30,31,31,30,31,30,31};

unsigned int TimeToSec(int year,int mon,int mdeay,int hour,int min,int sec);
void SecToTime(unsigned int sec);
int GetWeek(unsigned int sec);

int main(void)
{
	//将标准时间转为秒单位时间  (设置时间)
	unsigned int time=TimeToSec(2018,9,1,16,40,20);
	while(1)
	{
		time++;
		Sleep(1000); //睡眠1秒时间。 单位是ms
		SecToTime(time);
		week=GetWeek(time); //获取星期
		printf("%d-%d-%d %d:%d:%d 星期%d\n",year,mon,mdeay,hour,min,t_sec,week);
	}
	return 0;
}
/*
函数功能: 判断平年和闰年
函数返回值: 1表示闰年  0表示平年
*/
int GetYearStat(int year)
{
	if((year%4==0&&year%100!=0)||year%400==0)return 1; //闰年
	return 0; //平年
}

/*
将秒单位时间转为标准时间
时间基准点: 1970年1月1日0时0分0秒
思想: 减法
*/
void SecToTime(unsigned int sec)
{
	int i;
	year=1970; //基准年份
	/*1. 计算过了多少年*/
	while(sec>=365*24*60*60) //秒还够一年
	{
		if(GetYearStat(year)) //闰年
		{
			if(sec>366*24*60*60)
			{
				sec-=366*24*60*60; //减去一年
				year++; //年份累加
			}
			else
			{
				break;
			}
		}
		else
		{
			sec-=365*24*60*60; //减去一年
			year++; //年份累加
		}
	}

	/*2. 计算过了多少月*/
	mon=1;
	if(GetYearStat(year)) //闰年
	{
		for(i=0; i<12; i++)
		{
			if(sec>=mon_r[i]*24*60*60) //够一个月
			{
				sec-=mon_r[i]*24*60*60; //减去一个月
				mon++;//增加一个月
			}
			else break;
		}
	}
	else
	{
		for(i=0; i<12; i++)
		{
			if(sec>=mon_p[i]*24*60*60) //够一个月
			{
				sec-=mon_p[i]*24*60*60; //减去一个月
				mon++;//增加一个月
			}
			else break;
		}
	}
	
	/*3. 计算过了多少天*/
	mdeay=1;
	while(sec>=24*60*60) //判断是否够一天
	{
		sec-=24*60*60;
		mdeay++;
	}

	/*4. 过了多少小时*/
	hour=0;
	while(sec>=60*60)
	{
		sec-=60*60;
		hour++;
	}
	/*5. 过了多少分钟*/
	min=0;
	while(sec>=60)
	{
		sec-=60;
		min++;
	}
	/*6. 过了多少秒*/
	t_sec=sec; 
}
;>

2. 时间转换-标准时间转秒

(2)函数2: 将标准时间转为秒单位的时间。
2018年6月1日19点41分23秒----------xxxxxxx秒
闰年366,平年365。 区分: 每年二月份相差一天.
标准时间基准点: 1970年1月1日0时0分0秒。

/*
将标准时间转为秒单位时间
思路: 全程加法
时间基准点: 1970年1月1日0时0分0秒
返回值: 得到的秒单位时间
*/
unsigned int TimeToSec(int year,int mon,int mdeay,int hour,int min,int sec)
{
	int i;
	int sec_cnt=0; //记录秒单位的时间
	/*1. 转换年*/
	for(i=1970; i;>
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620804
  • C语言
    +关注

    关注

    180

    文章

    7528

    浏览量

    128465
  • RTC
    RTC
    +关注

    关注

    2

    文章

    484

    浏览量

    65437
收藏 人收藏

    评论

    相关推荐

    瑞萨电子收购IDT通过最终监管审批

    本次收购预计将于太平洋夏季时间2019年3月29日/日本标准时间2019年3月30日完成。
    发表于 03-23 09:11 1677次阅读

    应用广泛的北斗标准时间

    北斗
    风雷仪表
    发布于 :2023年07月04日 15:50:58

    靠谱的linux系统时间校准方法概述

    今天在centos上设置定时任务,发现执行了但时间不对,用date命令读取系统时间,发现系统时间不是当前时间。网上说用命令ntpdatepool.ntp.org校准,发现校准后date
    发表于 07-17 06:27

    利用单片机的端口分别控制LCD1602标准时钟系统

    网上转载:利用单片机的端口分别控制LCD1602标准时钟系统、蜂鸣器和LED灯,达到智能操控照明系统,并用PROTEL 99SE软件对原理图和电路板的制作。这个主要是对光照的控制用单片机
    发表于 11-19 07:15

    什么是C语言标准

    ✍ 1、C 语言标准什么是 C 语言标准呢? 我们生活的现实世界,就是由各种
    发表于 12-15 09:10

    ESP8266 NODEMCU是怎样获取互联网上面时间服务器标准时间的呢

    ESP8266 NODEMCU是怎样获取互联网上面时间服务器标准时间的呢?其城训代码该怎样去编写呢?
    发表于 02-15 06:43

    A5358标准时序电路图

    A5358标准时序电路图
    发表于 07-03 12:30 827次阅读
    A5358<b class='flag-5'>标准时</b>序电路图

    瑞萨电子和Intersil宣布瑞萨电子对Intersil的收购获得最终监管批准

    日本标准时间2017年2月22日,日本东京 / 太平洋标准时间2017年2月21日,美国加州Milpitas 讯— 全球领先的半导体解决方案供应商瑞萨电子株式会社(TSE:6723,以下简称
    发表于 02-23 14:56 1.3w次阅读

    北京标准时间校对软件1.7实用工具应用程序免费下载

    本文档的主要内容详细介绍的是北京标准时间校对软件1.7免费下载。
    发表于 09-03 08:00 3次下载
    北京<b class='flag-5'>标准时间</b>校对软件1.7实用工具应用程序免费下载

    VRJAM和Sansar合作创建了VR世界中最大的独立音乐和艺术节

    HTC的Viveport为用户免费赠送今年的Lost Horizon的音乐节。该活动将于本周末从周六下午3点(太平洋标准时间上午7点)到周日凌晨3点(太平洋标准时间下午7点,仍在周六)举行。
    的头像 发表于 07-06 16:39 1582次阅读

    获取网络标准时间的源代码下载

    获取网络标准时间的源代码下载
    发表于 06-07 16:15 1次下载

    nodemcu解析服务器文件,实用经验帖 ESP8266 NODEMCU 获取互联网上面时间服务器的标准......

    实用经验帖 ESP8266 NODEMCU 获取互联网上面时间服务器的标准时间能少用原件尽量少用,所以就不用时间模块,直接用NODEMCU获取标准时间。硬件:NODEMCU 一块软件:
    发表于 12-17 18:00 0次下载
    nodemcu解析服务器文件,实用经验帖 ESP8266 NODEMCU 获取互联网上面<b class='flag-5'>时间</b>服务器的<b class='flag-5'>标准</b>......

    嵌入式代码如何解决时间问题、编码问题

    UTC时间(Universal Time Coordinated, 世界标准时间或世界协调时间),以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。UTC是基于
    发表于 11-14 15:46 413次阅读

    MM32SPIN0280内部时钟捕获外部HSE时钟

    对一段标准时间内的被测信号的上升沿数量进行计数。
    的头像 发表于 05-12 13:50 412次阅读
    MM32SPIN0280内部时钟捕获外部HSE时钟

    MM32SPIN0280内部时钟捕获外部HSE时钟

    对一段标准时间内的被测信号的上升沿数量进行计数。
    的头像 发表于 05-23 15:49 573次阅读
    MM32SPIN0280内部时钟捕获外部HSE时钟