zoukankan      html  css  js  c++  java
  • localtime、localtime_s、localtime_r的使用

    (0)

    struct timeb 
    { 
        time_t time; 
        unsigned short millitm; 
        short timezone, dstflag; 
    };
    

    time是从UTC时间1970年1月1日午夜(00:00:00)起累计的秒数;
    millitm是一秒内的毫秒数
    dstflag不为0,说明这是夏令时时间
    timezone是UTC时间和本地时间的相差分钟数

    利用其中的毫秒。基本上不会有重复的数字出现。

    (1)localtime用来获取系统时间,精度为秒

    #include <stdio.h>
    #include <time.h>
     
    int main()
    {
        time_t time_seconds = time(0);
        struct tm* now_time = localtime(&time_seconds);
     
        printf("%d-%d-%d %d:%d:%d\n", now_time->tm_year + 1900, now_time->tm_mon + 1,
            now_time->tm_mday, now_time->tm_hour, now_time->tm_min,
            now_time->tm_sec);
    }
    

    函数的原型是struct tm *localtime(const time_t * timep)
    需要包含头文件:#include <time.h>
    struct tm的结构为

    int tm_sec; /* 秒 – 取值区间为[0,59] /
    int tm_min; /
    分 - 取值区间为[0,59] /
    int tm_hour; /
    时 - 取值区间为[0,23] /
    int tm_mday; /
    一个月中的日期 - 取值区间为[1,31] /
    int tm_mon; /
    月份(从一月开始,0代表一月) - 取值区间为[0,11] /
    int tm_year; /
    年份,其值等于实际年份减去1900 /
    int tm_wday; /
    星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 /
    int tm_yday; /
    从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 /
    int tm_isdst; /
    夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/

    (2)localtime_r也是用来获取系统时间,运行于linux平台下
    函数原型为struct tm *localtime_r(const time_t *timep, struct tm *result);

    #include <stdio.h>
    #include <time.h>
     
    int main()
    {
        time_t time_seconds = time(0);
        struct tm now_time;
        localtime_r(&time_seconds, &now_time);
     
        printf("%d-%d-%d %d:%d:%d\n", now_time.tm_year + 1900, now_time.tm_mon + 1,
            now_time.tm_mday, now_time.tm_hour, now_time.tm_min, now_time.tm_sec);
    }
    

    (3)localtime_s也是用来获取系统时间,运行于windows平台下,与localtime_r只有参数顺序不一样

    #include <iostream>
    #include <time.h>
     
    int main()
    {
    	time_t time_seconds = time(0);
    	struct tm now_time;
    	localtime_s(&now_time,&time_seconds);
     
    	printf("%d-%d-%d %d:%d:%d\n", now_time.tm_year + 1900, now_time.tm_mon + 1,
    		now_time.tm_mday, now_time.tm_hour, now_time.tm_min, now_time.tm_sec);
    }
    

    会什么有了localtime还要有其他两个函数呢,因为localtime并不是线程安全的,观察localtime和localtime_r的调用发现,localtime在使用时,我们只需定义一个指针,并不需要为指针申请空间,而指针必须要指向内存空间才可以使用,其实申请空间的动作由函数自己完成,这样在多线程的情况下,如果有另一个线程调用了这个函数,那么指针指向的struct tm结构体的数据就会改变。

        在localtime_s与localtime_r调用时,定义的是struct tm的结构体,获取到的时间已经保存在struct tm中,并不会受其他线程的影响。
    

    ————————————————
    版权声明:本文为CSDN博主「大大大白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u010087712/article/details/50731222

  • 相关阅读:
    可持久化线段树学习笔记
    GDI+学习之路
    tcpdump——分析tcp关闭4次过程
    nasm过程调用
    ios学习:NSURLConnection 和 Json数据解析
    ios学习:文件简单读写
    JSONP原理及其简单封装
    JSP使用JSTL
    JDBC
    Apache无法正常启动的原因
  • 原文地址:https://www.cnblogs.com/sggggr/p/15527613.html
Copyright © 2011-2022 走看看