51单片机时间戳相关函数_unix时间戳c51单片机-程序员宅基地

技术标签: 单片机  

函数使用了long变量,比较占RAM,单片机要是空间紧张就别用了,会把mcu算糊涂的。


/******* timestamp时间戳函数 开始**********/

#define  SECOND_OF_DAY  86400   //一天多少秒

idata uchar DayOfMon[]={31,28,31,30,31,30,31,31,30,31,30,31};


/********************************************************************************************************


* FunctionName   : GetSecondTime()
* Description    : 日期格式转化为unix time
* EntryParameter : 
* ReturnValue    : 
********************************************************************************************************/


unsigned long GetSecondTime(void)
{
idata uint rYear,i,Cyear=0;
idata uchar rMon,rDay,rHour,rMin,rSec;
  idata unsigned long CountDay = 0;


rSec =BCD_to_DEC(RTC[6]);
rMin =BCD_to_DEC(RTC[5]);
rHour =BCD_to_DEC(RTC[4]);
rDay =BCD_to_DEC(RTC[2]);
rMon =BCD_to_DEC(RTC[1]);
rYear= 2000+BCD_to_DEC(RTC[0]);


for(i = 1970; i < rYear; i++)
  {
     if(((i%4==0) && (i%100!=0)) || (i%400==0))  Cyear++;
  }
CountDay = Cyear * 366 + (rYear-1970-Cyear) * 365;

for(i=1; i<rMon; i++)
  {
    if((i==2) && (((rYear%4==0)&&(rYear%100!=0)) || (rYear%400==0)))
            CountDay += 29;
    else
      CountDay += DayOfMon[i-1];
  }


  CountDay += (rDay-1);
  CountDay = CountDay*SECOND_OF_DAY + (unsigned long)rHour*3600 + (unsigned long)rMin*60 + rSec;
  CountDay = CountDay - 8*3600;//北京时间转化为世界时间
  return CountDay;

}




/********************************************************************************************************
* FunctionName   : GetDateTimeFromSecond()
* Description    : unix time转化为常用格式
* EntryParameter : 
* ReturnValue    : 
********************************************************************************************************/
void GetDateTimeFromSecond(unsigned long lSec)
{
uint i,j,iDay;
idata unsigned long lDay;




lSec = lSec + 8*3600;//转换为北京时间

  lDay = lSec / SECOND_OF_DAY;        
  lSec = lSec % SECOND_OF_DAY;
   i = 1970;
  while(lDay > 365)
  {
if(((i%4==0) && (i%100!=0)) || (i%400==0))//闰年
{
lDay -= 366;
}else
{
lDay -= 365;
}
i++;
  }
  if((lDay == 365) && !(((i%4==0)&&(i%100!=0)) || (i%400==0)))
  {
    lDay -= 365;
    i++;
  }


  RTC[0] = i-2000;//年份
  for(j=0;j<12;j++)  
  {
if((j==1) && (((i%4==0)&&(i%100!=0)) || (i%400==0)))
{
iDay = 29;
}else
{
iDay = DayOfMon[j];
}
    if(lDay >= iDay)
{
lDay -= iDay;
}
    else
{
break;
}
}
RTC[1] = j+1;  //月
     RTC[2] = lDay+1;//日
     RTC[4] = ((lSec / 3600))%24;  //时
     RTC[5] = (lSec % 3600) / 60;  //分
     RTC[6] = (lSec % 3600) % 60;  //秒



}






/********时间戳函数 结束***********/
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/silno/article/details/80595893

智能推荐

Spring(五)Spring整合Hibernate-程序员宅基地

文章浏览阅读275次。Spring整合Hibernate_spring整合hibernate

Eclipse 常用快捷键及使用技巧-程序员宅基地

文章浏览阅读78次。做 java 开发的,经常会用 Eclipse 或者 MyEclise 集成开发环境,一些实用的 Eclipse 快捷键和使用技巧,可以在平常开发中节约出很多时间提高工作效率,下面我就结合自己开发中的使用和大家分享一下 Eclipse 中常用到的快捷键和技巧。15 个 Eclipse 常用开发快捷键使用技巧1、alt+?或alt+/:自动补全代码或者提示代码这个是我最得意的快捷键组..._eclipese 使用技巧大全

42 SAP报错:作业类型 ACT001 没有为成本中心 1088 1200990001 设置(Activity type ATC001 not set up for cost center XXX)_作业类型 lab 没有为成本中心 ql99 1001 设置-程序员宅基地

文章浏览阅读567次,点赞6次,收藏11次。解决方案:CO模块使用前台事务码KP26维护活动类型价格,即可。业务操作:PP模块前台事务码CR02维护活动类型时,报错如上。报错原因:CO模块没有为活动类型进行价格维护。CO模块KP26维护作业类型价格完毕。2024年1月26日 写于上海。事务码KP26进入,_作业类型 lab 没有为成本中心 ql99 1001 设置

TortoiseGit解决TortoiseGitPlink要求输入密码-程序员宅基地

文章浏览阅读3.2k次,点赞4次,收藏10次。解决TortoiseGitPlink要求输入密码_tortoisegitplink

什么是大端存储和小端存储-程序员宅基地

文章浏览阅读4.7k次,点赞2次,收藏5次。详细了解大端和小端的存储_大端存储和小端存储

【共读】企业信息安全建设与运维指南(一)_信息安全运营服务实施指南研究-程序员宅基地

文章浏览阅读6.3k次,点赞5次,收藏49次。一、从零开始建设企业信息安全系统:企业信息安全体系分为:信息安全技术体系和信息安全管理体系 信息安全技术体系: 两个层面: 1.需建设安全相关基础设施和系统,以具备解决相关安全问题的能力。 2.需具备安全运营能力,只有正确部署和使用设备,才能真正保障信息安全。 信息安全管理体系: 两个层面: 1.具备信息安全相关的制度、规范、流程及策略。 2.具..._信息安全运营服务实施指南研究

随便推点

关于Error in callback for watcher “data“: “TypeError: data.indexOf is not a function“的错误_error in callback for watcher "data": "typeerror: -程序员宅基地

文章浏览阅读2.8w次,点赞10次,收藏12次。关于Error in callback for watcher “data”: "TypeError: data.indexOf is not a function"的错误说明原因:表格显示需要数组包含对象的形式,每个对象是一行数据,拿到的数据格式不对。错误例子:从后台获取数据res.data,显示在表格中。只有一条数据,六个内容,应该是一行六列,但是出现了六行六列,且都为空。报三个..._error in callback for watcher "data": "typeerror: data.indexof is not a func

Tomcat Session(CVE-2020-9484)反序列化漏洞复现_禁止使用session持久化功能filestore-程序员宅基地

文章浏览阅读1.2k次。北京时间2020年05月20日,Apache官方发布了 Apache Tomcat 远程代码执行 的风险通告,该漏洞编号为 CVE-2020-9484。Apache Tomcat 是一个开放源代码、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器。当Tomcat使用了自带session同步功能时,使用不安全的配置(没有使用EncryptInterceptor)会存在反序列化漏洞,攻击者通过精心构造的数据包, 可以对使用了自带session同步功能的Tomcat服务器进行攻击。_禁止使用session持久化功能filestore

java漏洞提权_CVE-2018-3211:Java Usage Tracker本地提权漏洞分析-程序员宅基地

文章浏览阅读170次。一、前言我们发现Java Usage Tracker中存在设计缺陷(或者脆弱点),攻击者可以利用该缺陷创建任意文件、注入攻击者指定的参数以及提升本地权限。这些攻击手段也能组合使用实现权限提升,以便访问受影响系统中其他应用或者用户不能访问的某些保护资源。我们通过Zero Day Initiative与Oracle合作修复了这个漏洞,厂商已经在10月份补丁中推出了安全更新。因此,用户以及企业应当尽快安..._java防范代码问题的提权脱库

关系型数据库(Sql)和非关系型数据库(NoSql)区别_sql关系 非关系-程序员宅基地

文章浏览阅读1.8k次。Sql与NoSql的区别Sql与NoSql的区别数据库关系型数据库非关系型数据库Sql与NoSql的区别数据库1.简单来说,就是存放各种数据的一个仓库,也就是一些数据按照某种模型存放到存储器的一个数据集合。简称DB,DataBase2.那么,数据有了,就需要管理,用来操纵和管理数据的软件就是数据管理系统 简称DBMS,DataBase Managent System3.那么 把上面这两个放到一起,也就是带有数据库并配置了管理系统的计算机系统 就是数据库系统 简称DBS,DataBase Syst_sql关系 非关系

MATLAB实现imrotate函数_imrotate函数matlab-程序员宅基地

文章浏览阅读5.1k次,点赞2次,收藏11次。编写算法实现图像绕中心点旋转功能先找到四个顶点旋转后的位置,然后求出新图像的大小找到旋转后的图像对应的原图像的位置,将原图像的颜色属性赋给相应位置的新图像(旋转思想为先将图像中心点移到坐标原点,然后进行旋转,最后再将坐标值换为实际的坐标值进行像素颜色属性的赋值)a=input('Enter the picture address:');b=input('Enter the angle:');R..._imrotate函数matlab

upstream server temporarily disabled while connecting to upstream(记录bug)-程序员宅基地

文章浏览阅读1.2k次。nginx连接上游服务器时,上游服务器暂时禁用问题解决_upstream server temporarily disabled while connecting to upstream

推荐文章

热门文章

相关标签