nrf51822 ---时间换成时间戳
来源:互联网 发布:数据误删恢复软件 编辑:程序博客网 时间:2024/06/06 18:08
单片机中时期如何转换成时间戳
Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中(比如Linux系统),也在许多其他操作系统中被广泛采用。
转换程序如下:
转换程序如下:
//**************************************************************************/******************************************************************************** * @file calender.h * @author Depth * @version V1.0.0 * @brief head file for calender.c ******************************************************************************/#ifndef CALENER_H#define CALENER_H#ifdef __cplusplusextern "C"{#endif#include <stdint.h> /********************************************************************* * MACROS */ #define IsLeapYear(yr) (!((yr) % 400) || (((yr) % 100) && !((yr) % 4)))/********************************************************************* * TYPEDEFS */ // To be used withtypedef struct{ uint8_t seconds; // 0-59 uint8_t minutes; // 0-59 uint8_t hour; // 0-23 uint8_t day; // 0-30 uint8_t month; // 0-11 uint16_t year; // 2000+} UTCTimeStruct;// number of seconds since 0 hrs, 0 minutes, 0 seconds, on the// 1st of January 2000 UTCtypedef uint32_t UTCTime;extern UTCTime TimeSeconds;extern UTCTimeStruct Time_iOS; /********************************************************************* * FUNCTIONS */ /* * Updates the OSAL clock and Timers from the MAC 320us timer tick. */ extern void TimeUpdate( void ); /* * Set the new time. This will only set the seconds portion * of time and doesn't change the factional second counter. * newTime - number of seconds since 0 hrs, 0 minutes, * 0 seconds, on the 1st of January 2000 UTC */ extern void Set_Clock( UTCTime newTime ); /* * Gets the current time. This will only return the seconds * portion of time and doesn't include the factional second counter. * returns: number of seconds since 0 hrs, 0 minutes, * 0 seconds, on the 1st of January 2000 UTC */ extern UTCTime Get_Clock( void ); /* * Converts UTCTime to UTCTimeStruct * * secTime - number of seconds since 0 hrs, 0 minutes, * 0 seconds, on the 1st of January 2000 UTC * tm - pointer to breakdown struct */ extern void ConvertUTCTime( UTCTimeStruct *tm, UTCTime secTime ); /* * Converts UTCTimeStruct to UTCTime (seconds since 00:00:00 01/01/2000) * * tm - pointer to UTC time struct */ extern UTCTime ConvertUTCSecs( UTCTimeStruct *tm ); /* * Update/Adjust the osal clock and timers * Msec - elapsed time in milli seconds */ extern void AdjustTimer( uint32_t Msec );/******************************************************************************************************************************************/#ifdef __cplusplus}#endif#endif /* OSAL_CLOCK_H */
/******************************************************************************** * @file calender.c * @author Depth * @version V1.0.0 * @date 12-May-2014 * @brief calender module based on app timer******************************************************************************/#include "calender.h"/********************************************************************* * MACROS */#define YearLength(yr) (IsLeapYear(yr) ? 366 : 365)//ÈÕÀú±äÁ¿UTCTimeStruct Time_iOS = {14,13,12,11,1,2015};UTCTimeStruct Time_Current;/********************************************************************* * CONSTANTS */// (MAXCALCTICKS * 5) + (max remainder) must be <= (uint16_t max),// so: (13105 * 5) + 7 <= 65535#define MAXCALCTICKS ((uint16_t)(13105))#define BEGYEAR 1970 // UTC started at 00:00:00 January 1, 2000#define DAY 86400UL // 24 hours * 60 minutes * 60 seconds/********************************************************************* * EXTERNAL FUNCTIONS */extern uint16_t ll_McuPrecisionCount(void);/********************************************************************* * LOCAL VARIABLES *///static uint16_t previousLLTimerTick = 0;//static uint16_t remUsTicks = 0;//static uint16_t timeMSec = 0;// number of seconds since 2010.1.1. 00:00:00UTCTime TimeSeconds = 0;/********************************************************************* * LOCAL FUNCTION PROTOTYPES */static uint8_t monthLength( uint8_t lpyr, uint8_t mon );/********************************************************************* * FUNCTIONS *//********************************************************************* * @fn Set_Clock * * @brief Set the new time. This will only set the seconds portion * of time and doesn't change the factional second counter. * * @param newTime - number of seconds since 0 hrs, 0 minutes, * 0 seconds, on the 1st of January 2000 UTC * * @return none */void Set_Clock( UTCTime newTime ){ TimeSeconds = newTime;}/********************************************************************* * @fn Get_Clock * * @brief Gets the current time. This will only return the seconds * portion of time and doesn't include the factional second * counter. * * @param none * * @return number of seconds since 0 hrs, 0 minutes, 0 seconds, * on the 1st of January 2000 UTC */UTCTime Get_Clock( void ){ return ( TimeSeconds );}/********************************************************************* * @fn ConvertUTCTime * * @brief Converts UTCTime to UTCTimeStruct * * @param Êä³ö tm - pointer to breakdown struct * * @param ÊäÈë secTime - number of seconds since 0 hrs, 0 minutes, * 0 seconds, on the 1st of January 2000 UTC * * @return none */void ConvertUTCTime( UTCTimeStruct *tm, UTCTime secTime ){ // calculate the time less than a day - hours, minutes, seconds { uint32_t day = secTime % DAY; // Çó³ö×îºóÒ»ÌìµÄÊ£ÓàÃëÊý£¬£¨³ýÈ¥ÕûÊýµÄÌìÊýÖ®ºóµÄÊ£ÓàÃëÊý£© tm->seconds = day % 60UL; // Çó³ö×îºóÒ»·ÖÖÓµÄÊ£ÓàÃëÊý £¨×îºóÒ»ÌìµÄÊ£ÓàÃëÊý¶Ô60ÇóÓࣩ tm->minutes = (day % 3600UL) / 60UL; //Çó³ö ×îºóһСʱʣÓàµÄÕû·ÖÖÓÊý tm->hour = day / 3600UL; //Çó×îºóÒ»ÌìµÄÕûСʱÊý } // Fill in the calendar - day, month, year { uint16_t numDays = secTime / DAY; tm->year = BEGYEAR; while ( numDays > YearLength( tm->year ) ) { numDays -= YearLength( tm->year ); tm->year++; } tm->month = 0; while ( numDays > monthLength( IsLeapYear( tm->year ), tm->month ) ) { numDays -= monthLength( IsLeapYear( tm->year ), tm->month ); tm->month++; } tm->month++; tm->day = numDays; tm->day++; //СÍõ }}/********************************************************************* * @fn monthLength * * @param lpyr - 1 for leap year, 0 if not * * @param mon - 0 - 11 (jan - dec) * * @return number of days in specified month */static uint8_t monthLength( uint8_t lpyr, uint8_t mon ){ uint8_t days = 31; if ( mon == 1 ) // feb { days = ( 28 + lpyr ); } else { if ( mon > 6 ) // aug-dec { mon--; } if ( mon & 1 ) { days = 30; } } return ( days );}/********************************************************************* * @fn ConvertUTCSecs * * @brief Converts a UTCTimeStruct to UTCTime * * @param tm - pointer to provided struct * * @return number of seconds since 00:00:00 on 01/01/2000 (UTC) */UTCTime ConvertUTCSecs( UTCTimeStruct *tm ){ uint32_t seconds; /* Seconds for the partial day */ seconds = (((tm->hour * 60UL) + tm->minutes) * 60UL) + tm->seconds; /* Account for previous complete days */ { /* Start with complete days in current month */ uint16_t days = tm->day; /* Next, complete months in current year */ { int8_t month = tm->month - 1;// while ( --month >= 0 ) { days += monthLength( IsLeapYear( tm->year ), month ); } } /* Next, complete years before current year */ { uint16_t year = tm->year; while ( --year >= BEGYEAR ) { days += YearLength( year ); } } /* Add total seconds before partial day */ seconds += (days * DAY); } return ( seconds );}
/******************************************************************************************************************************************************/ void main(){ UTCTimeStruct Time = {14,30,16,18,8,2015}; Secondflag = ConvertUTCSecs(&Time) - 8*3600; //可以得到多少s,但是因为时间戳是从8:0:0开始计数的 所以应该减去8*3600s ConvertUTCTime(&Time,1439885936+8*3600); //为什么要加8*3600 因为是从1970:1:1:8:0:0开始计数的}
0 0
- nrf51822 ---时间换成时间戳
- 时间戳换成中文日期
- 将时间戳 换成 时分秒
- 把秒换成时间显示
- mysql 将时间戳直接转换成普通日期格式
- 蓝牙芯片NRF51822入门学习1:时间管理
- 把当前时间换成20161025172404。。没月份和时间单位数的都在前面加0
- 时间戳转时间
- 时间戳转时间
- 时间戳转时间
- 时间戳转换时间
- 时间戳转时间
- 时间戳转时间
- 时间戳转时间
- 时间和时间戳
- 时间戳与时间
- 时间戳时间转
- 时间戳转换时间
- c结构体对齐深刻理解
- 公式编辑器使用帮助
- 面向对象的js程序设计
- 10011---Spring Security(01)——初体验
- centos 6.x 开机自启动ejabberd
- nrf51822 ---时间换成时间戳
- 字符图标如何制作,使用
- 九度题目1207质因数的个数
- oracle 日期格式
- 面试感悟
- Android 中的XML 解析方法Pull 和Sax
- easyui的treegrid开发使用
- Razor 标签语法(1-11) Label,Text,Hidden,Password,Radio,CheckBox,DropdownList,Href,Img,Css,JS
- http请求