
0
#include<stdio.h>
typedef unsignedint uint;//输入时间月份与年份都应该减1,输出的一月与年份都应该加1
typedef unsignedlong int ulint;
uint a[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
uint b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
uint count=10000;//记录计数器的值,从0开始
uint run_ping(uint year)//判断是闰年还是平年,返回1是闰年,返回0是平年
{ uint i;
IF(year%4==0)//判断如何被4整除
{
if(year0==0)//判断如何被100整除
{
if(year%400==0)//判断如何被400整除
{
i=1;
}
else
{
i=0;

}
}
else
{
i=1;
}
}
else
{
i=0;
}
return i;
}
ulint set_time(uint year,uint month,uint day,uint hour,uint min,uint second)//设置当前计数器的初值
{
ulint sec=0,i=0,x=0;
if(run_ping(year))//判断是平年还是闰年
{
for(i=1;i<month;i++)//闰年
{

sec+=(a*86400);//当前月份的总时间
}
sec=366*(year-1)*86400+sec+day*86400+hour*3600+min*60+second;//初始化的时间化成秒,化简成计数器的初始值,当前季度12则实际只有11个月完整,第12月没过
}
else
{
for(i=1;i<month;i++)//平年月份值化成总秒
{
sec+=(a*86400);//如果超过2月份的话,就多加了一夜
}
if(month>2)//因为平年的2月28天
{
sec=365*(year-1)*86400+sec+day*86400+hour*3600+min*60+second;//多加了三天需要得减去。
}
else
{
sec=365*(year-1)*86400+sec+day*86400+hour*3600+min*60+second;//没有过2月不用减去多去的每天,年月日时分秒
}
}
return sec;

}
ulint current_time(void)//开始当前的时间,一般在初始化一个变量的之后,一定要先赋值为0,否则也许发生预想不到的状况
{
ulint time=0,year=0,month=0,second=0,hour=0,min=0,i=0,day=0;
long int day_month=0;
time=set_time(130,5,20,12,0,0)+count;//当前的时间总秒,年份不能太长或许高于数据长度,
if(run_ping(18))
{
year=time/86400/366;//输出时year需要加1,获取年份,一天86400s
day_month=time/86400%366;//月份加天数
do
{
day_month-=a[++i];
}while(day_month>0);
month=i;//获取当前的月份
day=day_month+a;//获取日期
}
else
{
year=time/86400/365;//输出时year需要加1stm32万年历程序流程图stm32万年历程序流程图,获取年份,time/86400代表小数天数,求余代表小时加秒数

day_month=time/86400%365;//月份加天数
do
{
day_month-=b[++i];
}while(day_month>0);
month=i;//获取当前的月份
day=day_month+a;//获取日期
}
hour=time%86400/3600;//当前的小时
min =time%86400%3600/60;//分钟数
second=time%86400%3600%60;//秒数
return year+1;//时分秒正确,数据长度问题,数据有无符号问题
}
void main(void)
{
ulint dat1;
dat1=current_time();
//dat1=set_time(1,2,1,1,0,10);
printf("%d",dat1);
}
2
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-124736-1.html
这公关
北京
更新完游戏都进不了
还记得二战时十个中国人都不够一个日本鬼子打吗