unix时间戳怎么有限制_unix时间戳限制 - CSDN
  • UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以的时候需要互相转换,下面给出PHP日期转时间戳、...


    UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以有的时候需要互相转换,下面给出PHP日期转时间戳、MySQL日期转换函数互相转换的几种转换方式和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以有的时候需要互相转换,下面给出互相转换的几种转换方式。 


    一、在MySQL中完成 
       
    这种方式在MySQL查询语句中转换,优点是不占用PHP解析器的解析时间,速度快,缺点是只能用在数据库查询中,有局限性。 
    1. UNIX时间戳转换为日期用函数: FROM_UNIXTIME() 
    一般形式:select FROM_UNIXTIME(1156219870); 
    2. 日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() 
    一般形式:Select UNIX_TIMESTAMP('2006-11-04 12:23:00′); 
    举例:mysql查询当天的记录数: 
    $sql=”select * from message Where DATE_FORMAT(FROM_UNIXTIME(chattime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') order by id desc”; 
    当然大家也可以选择在PHP中进行转换,下面说说在PHP中转换。 

    二、在PHP中完成 
       
    这种方式在PHP程序中完成转换,优点是无论是不是数据库中查询获得的数据都能转换,转换范围不受限制,缺点是占用PHP解析器的解析时间,速度相对慢。 
    1. UNIX时间戳转换为日期用函数: date() 
    一般形式:date('Y-m-d H:i:s', 1156219870); 
    2. 日期转换为UNIX时间戳用函数:strtotime() 
    一般形式:strtotime('2010-03-24 08:15:42'); 

    php日期转时间戳,指定日期转换成时间戳 

    php日期转时间戳、指定日期转换成时间戳,PHP定时任务。 
    这两天要实现这样功能: 
    当达到某一条件时,让服务器发短信给用户,数量为多条。 
    基本思路:linux 定时扫描,若有满足条件的用户,则发送短信。 
    但为了防止打扰到用户,要求只能在白天8:00-20:00发送短信,怎么样获得到每天的这段时间区间? 
    如下代码: 

    复制代码代码如下:

    <? 
    $y=date("Y",time()); 
    $m=date("m",time()); 
    $d=date("d",time()); 
    $start_time = mktime(9, 0, 0, $m, $d ,$y); 
    $end_time = mktime(19, 0, 0, $m, $d ,$y); 
    $time = time(); 
    if($time >= $start_time && $time <= $end_time) 

    // do something.... 

    ?> 
    展开全文
  • Unix时间戳转化时间

    2019-02-18 11:07:13
    因为项目中经常用到Unix时间戳的转化,今天就总结一下 PHP中 这种方式在PHP程序中完成转换,优点是无论是不是数据库中查询获得的数据都能转换,转换范围不受限制,缺点是占用PHP解析器的解析时间,速度相对慢。 用...

    因为项目中经常用到Unix时间戳的转化,今天就总结一下

    PHP中
    这种方式在PHP程序中完成转换,优点是无论是不是数据库中查询获得的数据都能转换,转换范围不受限制,缺点是占用PHP解析器的解析时间,速度相对慢。
    用函数:
    date() 一般形式:date(‘Y-m-d H:i:s’, unix时间)
    PHP中将正常时间戳转化为Unix时间戳
    用函数:echo strtotime(“now”), “\n”;
    echo strtotime(“10 September 2000”), “\n”;
    echo strtotime("+1 day"), “\n”;
    echo strtotime("+1 week"), “\n”;
    echo strtotime("+1 week 2 days 4 hours 2 seconds"), “\n”;
    echo strtotime(“next Thursday”), “\n”;
    echo strtotime(“last Monday”), “\n”;

    MySQL中
    这种方式在MySQL查询语句中转换,优点是不占用PHP解析器的解析时间,速度快,缺点是只能用在数据库查询中,有局限性。

    1. UNIX时间戳转换为日期用函数: FROM_UNIXTIME()
      一般形式:select FROM_UNIXTIME(1156219870);
    2. 日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP()
      一般形式:Select UNIX_TIMESTAMP(‘2006-11-04 12:23:00′);
      举例:mysql查询当天的记录数:
      $sql=”select * from message Where DATE_FORMAT(FROM_UNIXTIME(chattime),’%Y-%m-%d’) = DATE_FORMAT(NOW(),’%Y-%m-%d’) order by id desc”;

    JS中
    UNIX时间戳转换为日期用函数
    new Date(Unix时间戳*1000)
    在这里插入图片描述
    但是格式并不尽如人意,自定义format函数对其进行格式转化
    // 对Date的扩展,将 Date 转化为指定格式的String
    // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
    // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
    Date.prototype.Format = function(fmt)
    { //author: meizz
    var o = {
    “M+” : this.getMonth()+1, //月份
    “d+” : this.getDate(), //日
    “h+” : this.getHours(), //小时
    “m+” : this.getMinutes(), //分
    “s+” : this.getSeconds(), //秒
    “q+” : Math.floor((this.getMonth()+3)/3), //季度
    “S” : this.getMilliseconds() //毫秒
    };
    if(/(y+)/.test(fmt))
    fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
    for(var k in o)
    if(new RegExp("("+ k +")").test(fmt))
    fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : ((“00”+ o[k]).substr((""+ o[k]).length)));
    return fmt;
    }

    new Date(Unix时间戳*1000).Format(“yyyy-MM-dd hh:mm:ss”);
    在这里插入图片描述

    展开全文
  • 一、问题背景 最近项目中需要上传包含时间戳的设备数据到服务器平台。...Unix时间戳只占用4个字节,而且Unix时间戳在服务器端更加通用,但是在单片机上没有想Linux环境下现成的time(),localtime(),mkti...

    一、问题背景

    最近项目中需要上传包含时间戳的设备数据到服务器平台。原本想把“年”,“月”,“日”,“时”,“分”, “秒”分别用一个uint8_t的数据类型去存储,即占用6个字节。但是在平台配置协议时,只有一种叫“Unix时间戳”的数据类型。Unix时间戳只占用4个字节,而且Unix时间戳在服务器端更加通用,但是在单片机上没有想Linux环境下现成的time(),localtime(),mktime()等库函数调用。所以考虑自己实现Unix时间戳和北京时间的相互转换。

    二、Unix时间戳简介

    Unix时间戳:
    是从1970年1月1日00:00:00开始到当前时刻经过的秒数。
    例如:一个小时表示为Unix时间戳格式为:3600秒;一天表示为Unix时间戳为86400秒。 
    当然由于时区的关系,北京时间在算出来的秒数后面需要加上8个小时(8*3600秒)。

    比如在linux中,我们获取Unix时间戳可以用:

    typedef long time_t; /* time value */
    time_t time(time_t * timer)

    调用后会返回一个time_t类型的值(即long)。由于在大多数32位的设备上,long为4个字节有符号数,所以最大秒数为:2^23,大约2038年就会存在溢出的问题。所以后面的设备都用64位去存储,当然这不是本文探讨的地方。

    为什么使用Unix时间戳?
    在服务器端使用Unix时间戳更加通用。

    三、算法转换思路

    北京时间转Unix时间戳:

    这个转换比较简单,用当前的时间的年月日时分秒,依次减去1970/1/1 00:00:00即可。只要注意闰年的情况就行,最后注意需要加上北京时区的8个小时。

    Unix时间戳转北京时间:

    不严谨的说每隔4年就有一个闰年(此处暂不考虑2100年这样的非闰年,因为time_t限制,可取的范围只有1970~2038),所以可以将4年看做一个周期(即365+365+365+366=1461天)。通过总天数除以1461得到周期的个数,然后1970加上周期的个数乘以4就是年份。总天数对1461取余就是这个周期内的天数,然后根据平闰年去判断年月日时分秒。

    四、具体代码

    #include <stdio.h>
    #include <string.h>
    #include "stdint.h"
    
     
    #define FOURYEARDAY (365+365+365+366)  //4年一个周期内的总天数(1970~2038不存在2100这类年份,故暂不优化)
    #define TIMEZONE    (8)                //北京时区调整 
     
    typedef struct rtc_time_struct
    {
        uint16_t ui8Year;       // 1970~2038
        uint8_t ui8Month;       // 1~12
        uint8_t ui8DayOfMonth;  // 1~31
        uint8_t ui8Week;
        uint8_t ui8Hour;        // 0~23
        uint8_t ui8Minute;      // 0~59
        uint8_t ui8Second;      // 0~59
       
    }rtc_time_t;
     
    static uint8_t month_day[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //平年 
    static uint8_t Leap_month_day[12]={31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //闰年 
    const uint16_t dayPerYear[4] = {365, 365, 365, 366};
     
    // 判断是否是闰年 
    // year: 需要判断的年 
    // return:1:闰年
    //        0: 平年 
    uint8_t isLeapYear(uint16_t year)
    {
    	uint8_t res=0;
    	
    	if(year%4 == 0) // 能够被4整除 
    	{
    		if((year%100 == 0) && (year%400 != 0))	//能够被100整除,但是不能够被400整除 
    		{
    			res = 0;
    		}
    		else
    		{
    			res =1;
    		}
    	}
    	return res;
    }
     
    // 将Unix时间戳转换为北京时间
    // unixTime: 需要判断的Unix时间戳 
    // *tempBeijing:返回的北京时间
    // return:none
    // note:没对输入参数正确性做判断
    void covUnixTimeStp2Beijing(uint32_t unixTime, rtc_time_t *tempBeijing)
    {
        uint32_t totleDaynum=0, totleSecNum=0;
        uint16_t remainDayofYear, tempDay=0;
        uint8_t *pr, tempYear=0;
        
     
        totleDaynum = unixTime/(24*60*60); //总天数(注意加括号)
        totleSecNum = unixTime%(24*60*60); //当天剩余的秒速
     
        memset(tempBeijing, 0x00, sizeof(rtc_time_t));
        //1.计算哪一年
        tempBeijing->ui8Year = 1970 + (totleDaynum/FOURYEARDAY)*4;
        remainDayofYear = totleDaynum%FOURYEARDAY+1;
        while(remainDayofYear >= dayPerYear[tempYear]){
            remainDayofYear -= dayPerYear[tempYear];
            tempBeijing->ui8Year++;
            tempYear++;
        }
        
        //2.计算哪一月的哪一天
        pr = isLeapYear(tempBeijing->ui8Year)?Leap_month_day:month_day;
        while(remainDayofYear > *(pr+tempBeijing->ui8Month))
        {
    		remainDayofYear -= *(pr+tempBeijing->ui8Month);
            tempBeijing->ui8Month++;
        }
        tempBeijing->ui8Month++; //month
        tempBeijing->ui8DayOfMonth = remainDayofYear; //day
      
        //3.计算当天时间
        tempBeijing->ui8Hour = totleSecNum/3600;
        tempBeijing->ui8Minute = (totleSecNum%3600)/60; //error:变量搞错
        tempBeijing->ui8Second = (totleSecNum%3600)%60;
     
        //4.时区调整
        tempBeijing->ui8Hour +=TIMEZONE; 
        if(tempBeijing->ui8Hour>23){
            tempBeijing->ui8Hour -= 24;
            tempBeijing->ui8DayOfMonth++;
        }
    }
     
    // 将北京时间转换为Unix时间戳 
    // year: 需要判断的年 
    // return:Unix时间戳(从1970/1/1 00:00:00 到现在的秒数) 
    // note:没对输入参数正确性做判断
    uint32_t covBeijing2UnixTimeStp(rtc_time_t *beijingTime)
    {
    	uint32_t daynum=0, SecNum=0; //保存北京时间到起始时间的天数
    	uint16_t tempYear=1970, tempMonth=0;
     
     
    	//1.年的天数 
    	while(tempYear < beijingTime->ui8Year) 
    	{
    		if(isLeapYear(tempYear)){
    			daynum += 366;
    		}
    		else{
    			daynum += 365;
    		}
    		tempYear++;
    	}
    	//2.月的天数
     	while(tempMonth < beijingTime->ui8Month-1) 
     	{
            if(isLeapYear(beijingTime->ui8Year)){ //闰年
                daynum += Leap_month_day[tempMonth];
            }
            else{
    		    daynum += month_day[tempMonth];
            }
    		tempMonth++;
    	}
        //3.天数
    	daynum += (beijingTime->ui8DayOfMonth-1);
     
        //4.时分秒
        SecNum = daynum*24*60*60; //s    
        SecNum += beijingTime->ui8Hour*60*60;    
        SecNum += beijingTime->ui8Minute*60;    
        SecNum += beijingTime->ui8Second;
     
        //5.时区调整
        SecNum -= TIMEZONE*60*60;
     
        return SecNum;
    }
     
     
    //测试主函数 
    int main()
    {
        rtc_time_t testTime;
        uint32_t UnixTimsStamp=0;
     
        // 测试用例:平/闰年,闰月,8点前等 
        // 使用时,修改这里就可以
        testTime.ui8Year = 2016;
        testTime.ui8Month = 02;
        testTime.ui8DayOfMonth = 29;
        testTime.ui8Hour = 05;
        testTime.ui8Minute = 20;
        testTime.ui8Second = 00;
      
        UnixTimsStamp = covBeijing2UnixTimeStp(&testTime);
        printf("%d/%02d/%02d-%02d:%02d:%02d convert is: %u\n\n", \
                        testTime.ui8Year, testTime.ui8Month, testTime.ui8DayOfMonth, \
                        testTime.ui8Hour, testTime.ui8Minute, testTime.ui8Second, UnixTimsStamp);
     
        covUnixTimeStp2Beijing(UnixTimsStamp, &testTime);
        printf("%u convert is: %d/%02d/%02d-%02d:%02d:%02d\n", UnixTimsStamp, 
                        testTime.ui8Year, testTime.ui8Month, testTime.ui8DayOfMonth, \
                        testTime.ui8Hour, testTime.ui8Minute, testTime.ui8Second);
    }
     

    运行结果如下:

    五、结果验证

    通过站长工具验证,测试ok:

     
    展开全文
  • unix时间戳c语言源码

    2019-09-10 23:07:42
    在单片机程序开发中,经常会遇到做数据存储,利用时间信息做数据的搜索查询,时间格式最好还是用unix时间戳的形式 可以直接对时间进行加减运算 从RTC中读取的时间一般都是BCD码,如何转换成unix时间戳,简单的做了实现,...

    在单片机程序开发中,经常会遇到做数据存储,利用时间信息做数据的搜索查询,时间格式最好还是用unix时间戳的形式

    可以直接对时间进行加减运算

    从RTC中读取的时间一般都是BCD码,如何转换成unix时间戳,简单的做了实现,并开N台电脑从0开始跑到0XFFFFFFFF逐一做了

    验证

    /*
    ********************************************************************************
    * felename :               unixtime.c
    * author   :               ds
    * date     :               
    * describe :               unix time transmit .
    ********************************************************************************
    */
    
    
    /*
    --------------------------------------------------------------------------------
    修改记录:
    2014.09.09
    1.对1970年1月份进行了修正,因为北京时间是东八时区,与格林时间比,早了8个小时;
    2.将类型定义格式进行了独立定义,为生成库文件做准备;
    --------------------------------------------------------------------------------
    2015.04.17
    1.对数据类型定义进行了修改,将原来的typedef改为define;
    --------------------------------------------------------------------------------
    */
    #define  UNIXTIME_C
    
    /*include files*/
    #include "unixtime.h"
    
    #define START_YEAR                      1970                                    /*国际标准从1970-01-01 00:00:00开始*/
    #define END_YEAR                        2106                                    /*时间戳结束时间,32位整数所代表的最大时间区间*/
    #define TIME_AREA                          8
    #define BIAS_TIMEAREA_TIME              (3600*TIME_AREA)                        /*默认东8时区*/
    /*
    ********************************************************************************
    * 函数名称: Unixtime_To_Localtime
    * 参数    : Localtime-用户传递的形参,此函数将Localtime-Unixtime转换成普通时间并赋值
                给
                Localtime.UnixYear=***;
                Localtime.UnixMonth=***;
                Localtime.UnixDay=***;
                Localtime.UnixHour=***;
                Localtime.UnixMinute=***;
                Localtime.UnixSecond=***;            
    * 功能描述: 将Localtime->Unixtime32位无符号整数时间格式转换成完整的Localtime时间格式;
    * 返回值  : 0-转换成功;
                1-参数不合法;
    ********************************************************************************
    */
    INT8U_LIB_ARM Unixtime_To_Localtime_0(TIME_UNIX * Localtime)
    {
      const INT8U_LIB_ARM Days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 
      INT32U_LIB_ARM utime,n32_Pass4year=0;
      INT32U_LIB_ARM n32_hpery=0;
      
      if(!Localtime) return 1;                                                      /*checking validity of the parameter*/
      
      utime=Localtime->Unixtime;
      utime += 28800;                                                               /*加上北京时间*/  
      Localtime->UnixSecond=(INT8U_LIB_ARM)(utime % 60);                            /*取秒时间*/
      utime /= 60;  
      Localtime->UnixMinute=(INT8U_LIB_ARM)(utime % 60);                            /*取分钟时间*/  
      utime /= 60;                                                                  /*转换成小时*/
      n32_Pass4year=((INT32U_LIB_ARM)utime / ((365*4+1) * 24L ));                   /*计算过去多少个四年,每四年有 1461*24 小时*/ 
      Localtime->UnixYear=(n32_Pass4year << 2)+1970;                                /*计算年份*/  
      utime %= (365*4+1) * 24L;                                                     /*四年中剩下的小时数*/
      /*校正闰年影响的年份,计算一年中剩下的小时数*/
      for (;;)
      {    
        n32_hpery = 365 * 24;                                                       /*一年的小时数*/    
        if ((Localtime->UnixYear & 3) == 0)                                         /*判断闰年*/
        {
          n32_hpery += 24;                                                          /*是闰年,一年则多24小时,即一天*/
        }
        if (utime < n32_hpery)
        {
          break;
        }
         Localtime->UnixYear++;
         utime -= n32_hpery;
        }
        /*小时数*/
        Localtime->UnixHour=(INT8U_LIB_ARM)(utime % 24);
        /*一年中剩下的天数*/
        utime /= 24;
        /*假定为闰年*/
        utime++;
        /*校正润年的误差,计算月份,日期*/
        if ((Localtime->UnixYear & 3) == 0)      
        {
          if (utime > 60)
          {
            utime--;
          }
          else
          {
          if (utime == 60)
          {
            Localtime->UnixMonth = 2;
            Localtime->UnixDay = 29;
            return 0;
          }
        }
      }
      /*计算月日*/
      for (Localtime->UnixMonth = 0; Days[Localtime->UnixMonth] < utime;Localtime->UnixMonth++)
      {
        utime -= Days[Localtime->UnixMonth];
      }
      Localtime->UnixMonth = Localtime->UnixMonth+1;
      Localtime->UnixDay = (INT8U_LIB_ARM)(utime);
      return 0;
    }
    /*
    ********************************************************************************
    * 函数名称: Unixtime_To_Localtime
    * 参数    : Localtime-用户传递的形参,此函数将Localtime-Unixtime转换成普通时间并赋值
                给
                Localtime.UnixYear=***;
                Localtime.UnixMonth=***;
                Localtime.UnixDay=***;
                Localtime.UnixHour=***;
                Localtime.UnixMinute=***;
                Localtime.UnixSecond=***;  
    * 返回值  : 0-转换成功;
                1-参数不合法;
                2-
                3-
                4-转换的年限超出了限制;
    * 功能描述: 将Localtime->Unixtime32位无符号整数时间格式转换成完整的Localtime时间格式;            
    ********************************************************************************
    */
    INT8U_LIB_ARM Unixtime_To_Localtime (TIME_UNIX * Localtime)
    {
      INT8U_LIB_ARM daytemp;
      INT32U_LIB_ARM unixtime,restime,i;
      INT32U_LIB_ARM monthtable[13]={0,2678400,5097600,7776000,10368000,13046400,15638400,18316800,
                             20995200,23587200,26265600,28857600,31536000};         /*累计天数,默认是按照平年计算*/
      TIME_UNIX t;
      
      if(!Localtime) return 1;
      
      /*获取待转换的unix时间戳*/  
      unixtime=Localtime->Unixtime;
      
      /*比较时间赋初值:  1971-01-01 00:00:00*/  
      t.UnixYear=START_YEAR+1;                                                      
      t.UnixMonth=1;
      t.UnixDay=1;
      t.UnixHour=0;
      t.UnixMinute=0;
      t.UnixSecond=0;
      Localtime_To_Unixtime(&t);
    
      /*判断年份时间*/
      Localtime->UnixYear=START_YEAR;
      for(i=START_YEAR+1;i<END_YEAR;i++)                                            /*通过此循环判断了年*/
      {
        t.UnixYear=i;
        Localtime_To_Unixtime(&t);
    
        if(unixtime>t.Unixtime)
        {
          Localtime->UnixYear=i;                                                    /*暂时将此年份赋值给unixtime->UnixYear,再进行下次判断*/
          continue;
        }
        else if(unixtime==t.Unixtime)                                               /*相等立即赋值,并跳出*/
        {
          *Localtime=t;
          return 0;
        }         
        else 
        {
          if(t.UnixYear==(START_YEAR+1))
          {
            t.UnixHour=TIME_AREA;
          }
          t.UnixYear-=1;
          Localtime_To_Unixtime(&t);
          break;
        }
      }
      if(i>=END_YEAR) return 4;
      restime=unixtime-t.Unixtime;                                                  /*计算出超过一年的秒数*/  
      
      if(((Localtime->UnixYear% 4) == 0 && ((Localtime->UnixYear% 100) != 0 || (Localtime->UnixYear % 400) == 0)))/*判断闰年*/
      {
        /*如果是闰年,月份秒数表依次加24*3600=86400s*/
        for(i=2;i<13;i++)
        {
          monthtable[i] = monthtable[i] + 86400;
        }    
      }
      /*判断是不是1970年,因为时差的原因,要进行补偿*/
      if(Localtime->UnixYear==START_YEAR)
      {
        for(i=1;i<12;i++)
        {
          monthtable[i]-=BIAS_TIMEAREA_TIME;
        }
      }  
      
      /*判断月份,初始1月开始判断*/
      i=0;                                                                          /*从1月份开始*/
      do
      {    
        i++;
        if(i>12) return 3;
        Localtime->UnixMonth=i;
      }
      while(restime>=monthtable[i]);                                                /*月份超出当前月份的秒数,进行下月份判断*/
      
      switch(Localtime->UnixMonth)                                                  /*根据月份,判断天*/
      {
        case 1:
        /*1970-1-1 8:00:00开始计算unix时间;*/
        if(Localtime->UnixYear==START_YEAR)
        {
          restime+=BIAS_TIMEAREA_TIME;
        }
        daytemp=restime/86400;
        break;
        case 2:
        restime-=monthtable[1];
        daytemp=restime/86400;
        break;
        case 3:
        restime-=monthtable[2];
        daytemp=restime/86400;
        break;
        case 4:
        restime-=monthtable[3];
        daytemp=restime/86400;
        break;
        case 5:
        restime-=monthtable[4];
        daytemp=restime/86400;
        break;
        case 6:
        restime-=monthtable[5];
        daytemp=restime/86400;
        break;
        case 7:
        restime-=monthtable[6];
        daytemp=restime/86400;
        break;
        case 8:
        restime-=monthtable[7];
        daytemp=restime/86400;
        break;
        case 9:
        restime-=monthtable[8];
        daytemp=restime/86400;
        break;
        case 10:
        restime-=monthtable[9];
        daytemp=restime/86400;
        break;
        case 11:
        restime-=monthtable[10];
        daytemp=restime/86400;
        break;
        case 12:
        restime-=monthtable[11];
        daytemp=restime/86400;
        break;
        default:    
        break;
      }  
      Localtime->UnixDay=daytemp+1;                                                 /*由于每个月的日期从1号开始*/
    
      restime-=daytemp*86400;
      Localtime->UnixHour=restime/3600;                                             /*小时\分钟\秒都是从0时开始算起*/
      restime%=3600;
      Localtime->UnixMinute=restime/60;
      Localtime->UnixSecond=restime%60;
      
      return 0;  
    }
    
    /*
    ********************************************************************************
    * 函数名称: Localtime_To_Unixtime
    * 形参    : Localtime-时间结构指针,结构体中包含普通时间格式和unix时间(32位无符号)
                时间格式;
    * 返回值  : 返回转换状态信息
                0-转换成功;
                1-用户传递参数不合法;
    * 功能描述: 此函数将Localtime中普通时间格式转换成unix时间戳时间格式,并赋值给Localtime->Unixtime;            
    ********************************************************************************
    */
    INT8U_LIB_ARM Localtime_To_Unixtime(TIME_UNIX* Localtime)
    {
      INT8U_LIB_ARM month=Localtime->UnixMonth,day=Localtime->UnixDay, hour=Localtime->UnixHour;
      INT8U_LIB_ARM minute=Localtime->UnixMinute, second=Localtime->UnixSecond;
      INT16U_LIB_ARM i,x,unixtimeyear,year=Localtime->UnixYear;
      INT16U_LIB_ARM monthtable[13]={0,31,59,90,120,151,181,212,243,273,304,334,365};       /*累计天数*/
      INT32U_LIB_ARM  unixtimeday,extraday;  
      
      if(!Localtime) return 1;                                                      /*checking validity of the parameter*/  
      
      for(x=1970,extraday=0;x<year;x++)                                             /*计算1970年到现在有多少闰月的多一天*/
      {
        if(((x % 4) == 0 && ((x % 100) != 0 || (x % 400) == 0)))
        {
          extraday++;
        }
      }
      unixtimeyear = year - 1970;
      if((((year) % 4) == 0 && (((year) % 100) != 0 || ((year) % 400) == 0)))       /*判断当年是否是闰年,如果是闰年修改月累计天数数组*/
      {
        for(i=2;i<12;i++)
        {
          monthtable[i] = monthtable[i] + 1;
        }
      }  
      unixtimeday = unixtimeyear*365 + monthtable[month-1] + day-1 + extraday;      /*计算总共的天数*/
      Localtime->Unixtime = unixtimeday*86400 + hour*3600+minute*60 + second-BIAS_TIMEAREA_TIME;/*按照国际标准,北京时间(东8时区)1970-1-1 8:00:00开始计算unix时间为0;*/  
      return 0;
    }
    
    
    
    /*
    ********************************************************************************
    * felename :                    unixtime.h
    * author   :                    dashuang
    * date     :                    
    * describe :                    unixtime header file.
    ********************************************************************************
    */
    #ifndef UNIXTIME_H
    #define UNIXTIME_H
    
    #define BYTE_LIB_ARM     char
    #define INT8U_LIB_ARM    unsigned char
    #define INT16U_LIB_ARM   unsigned short
    #define INT32U_LIB_ARM   unsigned int
    
    /*unixtime structure*/
    typedef struct
    {
      /*普通时间*/
      INT16U_LIB_ARM UnixYear;
      INT8U_LIB_ARM  UnixMonth;
      INT8U_LIB_ARM  UnixDay;
      INT8U_LIB_ARM  UnixHour;
      INT8U_LIB_ARM  UnixMinute;
      INT8U_LIB_ARM  UnixSecond;
    
      /*unix时间戳*/
      INT32U_LIB_ARM Unixtime ;
    }TIME_UNIX;
    
    /*functions of unixtime converting declaration*/
    /*
    ********************************************************************************
    * 函数名称: Localtime_To_Unixtime
    * 形参    : Localtime-时间结构指针,结构体中包含普通时间格式和unix时间(32位无符号)
                时间格式;
    * 返回值  : 返回转换状态信息
                0-转换成功;
                1-用户传递参数不合法;
    * 功能描述: 此函数将Localtime中普通时间格式转换成unix时间戳时间格式,并赋值给Localtime->Unixtime;            
    ********************************************************************************
    */
    INT8U_LIB_ARM Localtime_To_Unixtime(TIME_UNIX* Localtime);
    
    /*
    ********************************************************************************
    * 函数名称: Unixtime_To_Localtime(存在bug,但是方法值得深入研究)
    * 参数    : Localtime-用户传递的形参,此函数将Localtime-Unixtime转换成普通时间并赋值
                给
                Localtime.UnixYear=***;
                Localtime.UnixMonth=***;
                Localtime.UnixDay=***;
                Localtime.UnixHour=***;
                Localtime.UnixMinute=***;
                Localtime.UnixSecond=***;            
    * 功能描述: 将Localtime->Unixtime32位无符号整数时间格式转换成完整的Localtime时间格式;
    * 返回值  : 0-转换成功;
                1-参数不合法;
    ********************************************************************************
    */
    //INT8U_LIB_ARM Unixtime_To_Localtime_0(TIME_UNIX * Localtime);
    
    /*
    ********************************************************************************
    * 函数名称: Unixtime_To_Localtime
    * 参数    : Localtime-用户传递的形参,此函数将Localtime-Unixtime转换成普通时间并赋值
                给
                Localtime.UnixYear=***;
                Localtime.UnixMonth=***;
                Localtime.UnixDay=***;
                Localtime.UnixHour=***;
                Localtime.UnixMinute=***;
                Localtime.UnixSecond=***;  
    * 返回值  : 0-转换成功;
                1-参数不合法;
    * 功能描述: 将Localtime->Unixtime32位无符号整数时间格式转换成完整的Localtime时间格式;            
    ********************************************************************************
    */
    INT8U_LIB_ARM Unixtime_To_Localtime(TIME_UNIX * Localtime);
    #endif /*unixtime.h*/
    
    

     

    展开全文
  • UNIX时间戳

    2016-03-26 16:52:51
    时间戳是文件属性中的创建、修改、和访问时间。数字时间戳服务是Web网站安全服务项目之一,能提供电子文件的日期和...UNIX时间戳 在UNIX系统中,日期与时间表示为自1970年1月1日零点起到当前时刻的秒数,这种时间被称
  • Unix时间戳也被称为纪元时间或POSIX时间,这在很多操作系统或文件格式中被广泛使用。 本教程讨论Excel中日期和Unix时间戳之间的转换。 将日期转换为时间戳 将日期和时间转换为时间戳 将时间戳转换为日期 将日期...
  • Unix时间戳转php日期

    2018-04-04 22:08:15
    UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以的时候需要互相转换,下面给出PHP日期转时间戳、...
  • 在PHP+MySQL编程中,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以的时候需要互相转换,下面给出...
  • php 将标准字符串格式时间转换成unix时间戳的函数为:strtotime函数(PHP 4, PHP 5)。 strtotime函数详细参考: strtotime — 将任何英文文本的日期时间描述解析为 Unix 时间戳. 函数格式说明: int strtotime ( ...
  • http://blog.csdn.net/u012102306/article/details/51538574
  • 写过PHP+MySQL的程序员都知道时间差,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以的时候需要...
  • 写过PHP+MySQL的程序员都知道时间差,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以的时候需要...
  • 1.unix_timestamp 将时间转化为时间戳。(date 类型数据转换成 timestamp 形式整数) 没传时间参数则取当前时间的时间戳 MySQL> select unix_timestamp(); +------------------+ | unix_timestamp() | +---------...
  • 写过PHP+MySQL的程序员都知道时间差,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但 是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以的时候需要...
  • UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以的时候需要互相转换,下面给出PHP日期转时间戳、...
1 2 3 4 5 ... 20
收藏数 20,993
精华内容 8,397
热门标签
关键字:

unix时间戳怎么有限制