这篇文章介绍 标准时间与秒单位,秒单位与标准时间的转换方式,这份代码一般用在嵌入式单片机里比较多,比如:设置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;>
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
单片机
+关注
关注
6074文章
45335浏览量
663319 -
C语言
+关注
关注
183文章
7642浏览量
144558 -
RTC
+关注
关注
2文章
638浏览量
70969
发布评论请先 登录
相关推荐
热点推荐
靠谱的linux系统时间校准方法概述
今天在centos上设置定时任务,发现执行了但时间不对,用date命令读取系统时间,发现系统时间不是当前时间。网上说用命令ntpdatepool.ntp.org校准,发现校准后date
发表于 07-17 06:27
利用单片机的端口分别控制LCD1602标准时钟系统
网上转载:利用单片机的端口分别控制LCD1602标准时钟系统、蜂鸣器和LED灯,达到智能操控照明系统,并用PROTEL 99SE软件对原理图和电路板的制作。这个主要是对光照的控制用单片机
发表于 11-19 07:15
ESP8266 NODEMCU是怎样获取互联网上面时间服务器标准时间的呢
ESP8266 NODEMCU是怎样获取互联网上面时间服务器标准时间的呢?其城训代码该怎样去编写呢?
发表于 02-15 06:43
嵌入式代码如何解决时间问题、编码问题
UTC时间(Universal Time Coordinated, 世界标准时间或世界协调时间),以原子时秒长为基础,在时刻上尽量接近于世界时的一种
发表于 11-14 15:46
•1159次阅读
北斗卫星同步时钟系统:精准时间的秘密
办公楼中,所有的电脑、时钟甚至是楼宇的自动化系统,都显示着同一个时间。这个时间均来源于北斗卫星同步时钟系统。这个系统由一个母钟(主时钟)和一堆子钟组成,母钟负责发送标准时间信号,而子钟则负责接收并
精准同步背后的科学:标准时间网络的运维经验解析
在现代社会,标准时间同步时钟网络是金融、电力、通信等行业的核心基础设施之一。它的精准性不仅依赖于先进的技术,更离不开长期的运维经验积累。本文将探讨标准时间同步网络在实际应用中的关键经验,揭示其稳定运行背后的科学逻辑。
时间同步:数字世界的“隐形秩序”
该设备从GPS或北斗地球同步卫星上获取标准时钟信号信息,将这些标准时间信息在网络中传输,网络中需要时间信号的设备如计算机,DVR、等设备就可以与标准时钟信号同步。装置同时使用GPS和北

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