• unix时间戳通常有10位和13位的区别: 10位是包含年月日时分秒,13位包含了毫秒 获取时间戳: #采用time模块 time_stamp=time.time() 或者 #datetime模块 time_stamp=datetime.datetime(2019,10,10,0,0,0)....

    unix时间戳通常有10位和13位的区别:

    • 10位是包含年月日时分秒,13位包含了毫秒

    获取时间戳:

    #采用time模块
    time_stamp=time.time()

    或者

    #datetime模块
    time_stamp=datetime.datetime(2019,10,10,0,0,0).timestamp()

    将时间戳转换为年-月-日 时:分:秒格式:

    local_time=time.localtime(time_stamp)
    dt=time.strftime('%Y-%m-%d %H:%M:%S',local_time)

     

    展开全文
  • PHLIPS公司的ARM都内置了年月日时分秒格式的实时时钟,很好用;但是其他公司的产品并不具备这个功能,一部分只能记秒;51等简单单片机甚至没有内部实时时钟,一般需要使用中断程序累计秒。看来Unix时间
    实时时钟在嵌入式系统中应用非常广泛,一些芯片还内置了实时时钟。实际应用中往往使用外接I2C总线带电池时钟,系统上电后读取I2C总线时钟,初始化内部实时时钟,程序获取时间直接读内部实时时钟就可以了。
    PHLIPS公司的ARM都内置了年月日时分秒格式的实时时钟,很好用;但是其他公司的产品并不具备这个功能,一部分只能记秒;51等简单单片机甚至没有内部实时时钟,一般需要使用中断程序累计秒。

    看来Unix时间和年月日时分秒时间格式转换还是很有必要详细分析分析。其实这部分工作电脑很早就实现了,其算法也非常成熟,只不过这些底层的东西平时我们不注意罢了。
    下面先看一段Linux年月日转时分秒的算法,听说这个算法是目前最高效的算法:

    typedef        struct _DATE_TIME                    //年月日时分秒毫秒
    {
        unsigned 
    short year;
        unsigned 
    char month;
        unsigned 
    char day;
        unsigned 
    char hour;
        unsigned 
    char minute;
        unsigned 
    char second;
        unsigned 
    short msel;                        //millisecond
    }
     DATE_TIME;


    long long rtt_mktime(DATE_TIME time)
    {
        
    long long res;

        
    // 1..12 -> 11,12,1..10, Puts Feb last since it has leap day
        if (time.month <= 2)
        
    {
            time.month 
    += 10;
            time.year 
    -= 1;
        }

        
    else
        
    {
            time.month 
    -= 2;
        }


        
    /*
        // Calculate how much days from 1970 to today
        res = 59;                            //31@0001-January and 28@0001-February
        res += (time.year - 1) * 365;        //at least 365 days one year
        res += time.year / 4 - time.year / 100 + time.year / 400;    //leap years from 0001
        res += 367 * time.month / 12 - 30;    //days from March(0.5/7<=slope<0.5/5)
        res += time.day - 1;                //days
        res -= 719162;                        //days from 0001-1-1 to 1970-1-1
        // Calculate how much seconds
        res = ( (res * 24 + time.hour) * 60 + time.minute) * 60 + time.second;
        
    */

        
    ///*
        res = (long long)(time.year/4 - time.year/100 + time.year/400+
                
    367*time.month/12 + time.day +
                time.year
    *365 - 719499;
        res 
    = ((res*24 + time.hour        // now have hours
                )*60 + time.minute            // now have minutes
               )*60 + time.second;            // finally seconds
        
    //*/

        
    return res;
    }

    DATE_TIME是我自己定义的时间格式数据结构。

    年月日时分秒转换为Unix秒时间有两个难点:闰年的计算和月份天数的计算如何能不用判断语句直接利用数学函数来计算,一个看似简单的数字游戏。
    首先要注意公元纪年没有公元前0年和公元0年,公元后的第一天是0001年1月1日。

    闰年的计算可以比较简单:0001年到当年共有year/4-year/100+year/400个,闰年的天数是366天;所以从0001年到当年共有(year-1)*365 + year/4-year/100+year/400天。
    从1月到当月的天数计算起来比较复杂,但是从3月当当月的天数可以用函数来表示;我们可以使用一次函数表示,斜率大于等于30.5+0.5/7,小于30.5+0.5/5,以斜率30.5+0.5/6为例:y=ax+b,a=30.5+0.5/6=367/12,b=-30,有兴趣的朋友可以算一下,结果取整数就是3月到当月的天数:0,31,61,92,122,153,184,214,245,275,306,337。
    为了能够使用巧妙的函数,我们需要假设一年是从3月开始的,步骤如下:
    首先调整月份,一月和二月当作上一年的最后两个月;
    由于调整了月份,调整后的0001年1月即调整前的0001年3月实际上已经有0001年1月31天和0001年2月28天;
    由于公元纪年没有0年,所以调整后的0001年到调整后的当年共有(year-1)*365 + year/4-year/100+year/400天;
    从调整后的1月到调整后的当月共有367*month/12-30天;
    日期也是从1日开始的,从1日到当日共day-1天;

    最后将0001年到当天的天数计算出来,减去0001年到1970年的天数719162,即是Unix天数,这样就可以得到Unix秒了。


    2 年月日时分秒转Unix时间函数

    void rtt_localtime(long long res, DATE_TIME *time)
    {
        
    const int monthLengths[2][13= {
            
    0315990120151181212243273304334365},
            
    0316091121152182213244274305335366},
        }
    ;
        
    const int yearLengths[2= 365366 };
        
    int year;
        
    int month;
        
    int minMonth;
        
    int maxMonth;
        
        
    int days;
        
    int clock;
        
    int isLeap;
        
        days 
    = res / 86400;
        clock 
    = res % 86400;
        
    if(clock < 0)
        
    {
            clock 
    += 86400;
            days 
    -= 1;
        }

        
        
    ////////////////////////////////////////////////////////////////////////////
        // Calcaulate year, 11323=0x3A4FC880/86400; 13879=0x47798280/86400
        ///////////////////////////////////////////////////////////////////////////    
        if(days >= 0)
        
    {
            year 
    = days/366;
            days 
    -= year*365 + (year+1)/4 - (year+69)/100 + (year+369)/400;
            
            
    for(time->year = year + 1970; ; time->year++)
            
    {
                isLeap 
    = rtt_isleap(time->year);
                
    if(days < yearLengths[isLeap])
                
    {
                    
    break;
                }

                days 
    -= yearLengths[isLeap];
            }

        }

        
    else
        
    {
            year 
    = days/366;
            days 
    -= year*365 + (year-2)/4 - (year-30)/100 + (year-30)/400;
            
            
    for(time->year = year + 1970 - 1; ; time->year--)
            
    {
                isLeap 
    = rtt_isleap(time->year);
                days 
    += yearLengths[isLeap];
                
                
    if(days >= 0)
                
    {
                    
    break;
                }

            }

        }
        
        
        
    //////////////////////////////////////////////////////////////////////////
        // compute month and day, use the half search save time
        ///////////////////////////////////////////////////////////////////////////
        minMonth = 0;
        maxMonth 
    = 12;
        
    for(month = 5; month < 12 && month > 0; month = (minMonth + maxMonth) / 2)
        
    {
            
    // days between monthLengths[month]<=days<monthLengths[month+1]
            if(days < monthLengths[isLeap][month])    //too big
            {
                maxMonth 
    = month;
            }

            
    else if(days >= monthLengths[isLeap][month + 1])    //too small
            {
                minMonth 
    = month;
            }

            
    else    //so it is
            {
                
    break;
            }

        }

        days 
    -= monthLengths[isLeap][month];
        time
    ->month = month + 1;
        
        time
    ->day = days + 1;
        
        
        
    //////////////////////////////////////////////////////////////////////////
        // Calcaulate hour minute and second
        //////////////////////////////////////////////////////////////////////////
        time->hour = clock / 3600;        //3600s one hour
        clock = clock % 3600;
        time
    ->minute = clock / 60;        //60s one minute
        time->second = clock % 60;        //ms
    }

    首先将天数和秒数分开,如果Unix秒为负,表示当前为1970年前。

    Unix天数为正,当前年份在1970年之后,至少为days/366+1970年,首先假设当年为year=days/366+1970年;
    从1970年到假设年year的闰年数为(year+1)/4-(year+69)/100+(year+369)/400,从1970年到假设年year共有(year-1970)*365 + (year+1)/4-(year+69)/100+(year+369)/400;
    适当调整假设年这样我们就很快找到当前年份了。
    Unix天数为负,则当前年份为1970年前,只不过从当前年到1970年的闰年数为(year-2)/4-(year-30)/100+(year-30)/400。

    月份的计算采用二分法查找的方法,如果大于等于本月总天数,小于下一个月的总天数,则本月即为当前月;
    最后剩余天数加1即为当日。
    展开全文
  • $date = "2018-07-02 20:40:00"; $a = strtotime($date); //转换时间戳函数strtotime() echo $a.'&lt;br&gt;'; $b = date('m',$a); //取出该日期的月份进行打印 echo $b; 运行结果::
    $date = "2018-07-02 20:40:00";
    $a = strtotime($date);  //转换时间戳函数strtotime()
    echo $a.'<br>';
    $b = date('m',$a);  //取出该日期的月份进行打印
    echo $b; 

    运行结果::


    展开全文
  • [html] view plain copy ...//时间原本格式:1970-01-01 20:50:00 ...//转换年月日 select substr(from_unixtime(unix_timestamp(时间字段名称,


    [html] view plain copy
    1. //时间原本格式:1970-01-01 20:50:00
    2. where之后的条件为自定义添加
    3. //转换为年月日
    4. select substr(from_unixtime(unix_timestamp(时间字段名称,'yyyy-MM-dd')),1,4) as 自定义字段名称
    5. from table where id = * group by substr(from_unixtime(unix_timestamp(时间字段名称,'yyyy-MM-dd')),1,4);
    6. 显示:1970-01-01
    7. //转换为年月
    8. select substr(from_unixtime(unix_timestamp(时间字段名称,'yyyy-MM-dd')),1,4) as 自定义字段名称 
    9. from table where id = * group by substr(from_unixtime(unix_timestamp(时间字段名称,'yyyy-MM-dd')),1,7);
    10. 显示:1970-01
    11. //转换为年
    12. select substr(from_unixtime(unix_timestamp(时间字段名称,'yyyy-MM-dd')),1,4) as 自定义字段名称 
    13. from table where id = * group by substr(from_unixtime(unix_timestamp(时间字段名称,'yyyy-MM-dd')),1,10);
    14. 显示:1970

    展开全文
  • 其中要用的工具包: <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.5.1</version>......

    其中要用的工具包:

     

    		<dependency>
    			<groupId>cn.hutool</groupId>
    			<artifactId>hutool-all</artifactId>
    			<version>4.5.1</version>
    		</dependency>
     /**
         * 将秒数转成hh:mm:ss的时间
         * @param time
         * @return
         */
        public static String TimeToString(long time){
            SimpleDateFormat sf = new SimpleDateFormat("HH:mm:ss");
            sf.setTimeZone(TimeZone.getTimeZone("GTM+0"));
            return sf.format(time*1000);
        }
    
    
        /**
         * 将格式为HH:mm:ss的时间转成时间戳(从00:00:00开始计算)
         * @param time
         * @return
         * @throws Exception
         */
        public static int StringToTime(String time) throws Exception {
            SimpleDateFormat sf = new SimpleDateFormat("HH:mm:ss");
            sf.setTimeZone(TimeZone.getTimeZone("GTM+0"));
            Date parse2 = sf.parse(time);
            return Convert.toInt((parse2.getTime()) / 1000);
    
        }
    
        /**
         * 将格式为 HH:mm:ss - HH:mm:ss的字符串转成一个时间戳的数组
         * @param srt
         * @return
         * @throws Exception
         */
        public static Integer[] toStringToTime(Object srt) throws Exception {
            String s1 = srt.toString();
            String[] s = s1.split("-");
            Integer[] l = new Integer[2];
            l[0] = StringToTime(s[0]);
            l[1] = StringToTime(s[1]);
            return l;
        }
    
    
    
    
        /**
         * 将前端传来的时间字符转化成两个分为开始时间和结束时间
         * @param str  格式 yyyy-MM-dd - yyyy-MM-dd
         * @return
         */
        public static Long[] SplitDate(Object str) {
            String s = str.toString();
            String[] split = s.split(" - ");
            long begin = StringToTimestamp(split[0], "yyyy-MM-dd HH:mm:ss");
            long end = StringToTimestamp(split[1], "yyyy-MM-dd HH:mm:ss");
            Long[] arra = {begin, end};
            return arra;
        }
    
        /**
         * 将时间形式的字符串转成时间戳
         *yyyy-MM-dd
         * @return
         */
        public static long StringToTimestamp(String time, String format) {
            LocalDateTime parse1 = LocalDateTime.parse(time, DateTimeFormatter.ofPattern(format));
            ZoneId zone = ZoneId.systemDefault();
    
            Instant instant = parse1.atZone(zone).toInstant();
            Long l = instant.toEpochMilli();
            String s = l.toString();
            String sub = StrUtil.sub(s, 0, -3);
            return Long.parseLong(sub);
        }
    

     

    展开全文
  • Pandas读取csv文件时,时间会自动显示为‘YYYY-MM-DD HH:MM:SS’的格式,那么如果想要将这个时间转换Unix时间戳 呢? 先科普一下,什么是 Unix时间戳 呢? Unix时间戳 是一种时间表示方式,是一个整型值,代表...
  • mysql中UNIX时间戳与日期的相互转换 UNIX时间戳转换为日期用函数:FROM_UNIXTIME() select FROM_UNIXTIME(1410318106); 日期转换UNIX时间戳用函数:UNIX_TIMESTAMP() select UNIX_TIMESTAMP('2014-09-10 11:...
  • 原本想把“年”,“月”,“”,“时”,“分”, “秒”分别用一个uint8_t的数据类型去存储,即占用6个字节。但是在平台配置协议时,只有一种叫“Unix时间戳”的数据类型。Unix时间戳只占用4个字节,而且Unix...
  • Unix时间戳转化时间

    2019-02-18 11:07:13
    因为项目中经常用到Unix时间戳的转化,今天就总结一下 PHP中 这种方式在PHP程序中完成转换,优点是无论是不是数据库中查询获得的数据都能转换转换范围不受限制,缺点是占用PHP解析器的解析时间,速度相对慢。 用...
  • 北京时间转换为13位时间戳 : UTC+8--&gt;UTC--&gt;时间戳 e.g :  DECLARE @DATE DATETIME SET @DATE = DATEADD(HOUR,-8,'2018-12-07 14:39:27.073') --UTC SELECT CONVERT(BIGINT, DATEDIFF(MI, '19.....
  • strtotime() 函数将任何英文文本的日期或时间描述解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数), 将完整的时间格式转换时间撮的形式,再去进行转换。 echo date("Y-m-d",strtotime("2014-...
  • 怎么计算两个‘年月日时分秒’时间戳的时间间隔呢? SELECT to_unixtime(cast(a.apply_time as timestamp)) - to_unixtime(cast(b.su_time as timestamp)) as intervel 即可获得两个时间戳的时间间隔,单位为秒,/60...
  • 一般我们经常遇见的就是 时间戳转换为时分秒的, 但是这次做的是一个日期组件,后台要求要传时间戳格式的,还是比较少见的。 下面就告诉大家怎么做 2020-03-16 12:00:00 原始数据 转成:1584417600 1:新建文件,写成...
  • SELECT SUBSTRING(CONVERT(varchar(100),时间字段, 22),0,15) AS aa FROM 表名 转载于:https://www.cnblogs.com/lqLove/p/5964667.html
  • 把毫秒数转换年月日时分秒
  • //unixtime时间戳 转 年月日(PHP代码函数) //代码来源:Monxin ./config/functions.php function get_date($unixtime,$date_style,$timeoffset) { if($unixtime>-1 && $unixtime //echo "datetime_date"; ...
  • 在Linux C或C++编程中,因为应用场景的不同,经常会遇到各种时间之间的装换,有时需要BCD时间,有时需要Unix时间戳,也有叫绝对时间的。这里介绍几种时间格式转换的应用。 Unix时间戳:  Unix时间戳是一个绝对值...
  • 有时后端返回给我们的数据是一个时间戳,我们需要转换成年月,时分秒的形式展示在页面当中,为了以后的使用方便,我在这里简单写了个函数来进行转换。 1、是时间戳转换成年月,时分秒: function formatDate ...
  • unix time stamp(时间戳)和常规时间相互转换的C++代码
  • 25569:unix时间戳起始日期从1970-1-1算起,excel的是从1900-1-1算起,两者相差70年,累计25569天 86400:一天24小时换算成秒 16位的时间戳前10位是年-月--时-分-秒,后面6位是微秒 如果使用...
1 2 3 4 5 ... 20
收藏数 4,777
精华内容 1,910