zoukankan      html  css  js  c++  java
  • C语言 时间函数的学习和总结

    一直都是以简单的time_t t,time(&t),ctime(&t)来表示时间,后来要以时间为日志文件的名字时,就有点蒙逼了。学习一下。
     
    ```cpp
    tm结构:
    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()为负。*/
    ```
    获取当地时间的函数 :struct tm *localtime(const time_t * timep); 获得格林威治时间的函数:struct tm *gmtime(const time_t *timep);,两个函数的用法是一样的,以localtime为例子说明
    ```cpp
    #include <time.h>
    int main()
    {
        char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
        time_t timep;
        struct tm *p;
        time(&timep);
        p = localtime(&timep); //取得当地时间
        printf ("%d/%d/%d ", (1900+p->tm_year), (l+p->tm_mon), p->tm_mday);
        printf("%s%d:%d:%d ", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
    }
    ```cpp
    执行结果
    ```bash
    2016/06/3 Fri 21:25:34
    ```
    也有转换成标准格式的函数size_t strftime(char *strDest, size_t maxsize, const char *format, const struct tm *timeptr)
    ```cpp
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
     
    int main(int argc, char **argv)
     {
         time_t t;
         struct tm *lt;
         char nowtime[24];
     
         t = time(NULL);
         lt = localtime(&t);
     
         memset(nowtime, 0, sizeof(nowtime));
         strftime(nowtime, sizeof(nowtime), "%Y-%m-%d %H:%M:%S", lt);
         printf("nowtime = %s ", nowtime);
         return 0;
     }
    ```
    输出 nowtime = 2016-6-3 21:23:07
    ```json
    可选择的格式有
    %a 星期几的简写
     
    %A 星期几的全称
     
    %b 月份的简写
     
    %B 月份的全称
     
    %c 标准的日期的时间串
     
    %C 年份的前两位数字
     
    %d 十进制表示的每月的第几天
     
    %D 月/天/年
     
    %e 在两字符域中,十进制表示的每月的第几天
     
    %F 年-月-日
     
    %g 年份的后两位数字,使用基于周的年
     
    %G 年份,使用基于周的年
     
    %h 简写的月份名
     
    %H 24小时制的小时
     
    %I 12小时制的小时
     
    %j 十进制表示的每年的第几天
     
    %m 十进制表示的月份
     
    %M 十时制表示的分钟数
     
    %n 新行符
     
    %p 本地的AM或PM的等价显示
     
    %r 12小时的时间
     
    %R 显示小时和分钟:hh:mm
     
    %S 十进制的秒数
     
    %t 水平制表符
     
    %T 显示时分秒:hh:mm:ss
     
    %u 每周的第几天,星期一为第一天 (值从1到7,星期一为1)
     
    %U 第年的第几周,把星期日作为第一天(值从0到53)
     
    %V 每年的第几周,使用基于周的年
     
    %w 十进制表示的星期几(值从0到6,星期天为0)
     
    %W 每年的第几周,把星期一做为第一天(值从0到53)
     
    %x 标准的日期串
     
    %X 标准的时间串
     
    %y 不带世纪的十进制年份(值从0到99)
     
    %Y 带世纪部分的十制年份
     
    %z,%Z 时区名称,如果不能得到时区名称则返回空字符。
     
    %% 百分号
     ```
    获取微秒级时间的方法int  gettimeofday(struct timeval *tv, struct timezone *tz),目前的时间用tv所指的结构返回,时区信息则存在tz所指的结构里。
    ```cpp
    struct timeval
    {
         long tv_sec;/秒/
         long tv_usec;/微秒/
    };
    struct timezone
    {
         int tz_minutestwest;/和格林威治时间差几分钟/
         int tz_dsttime;
    }
    ```
    一般运用时,置tz为空,只取tv的值。
    ```cpp
    #include <sys/time.h>
    #include <stdio.h>
    int main(void)
    {
         int i;
         struct timeval tv;
        
         for(i = 0; i < 4; i++)
         {
              gettimeofday(&tv, NULL);
              printf("%d %d ", tv.tv_usec, tv.tv_sec);
              sleep(1);
         }
     
         return 0;
    }
    ```
  • 相关阅读:
    【Selenium】selenium中隐藏元素如何定位?
    【Mock】【接口测试】【面试】mock-server 环境搭建—加分项!
    【Mock】mock基础、简单的单元测试代码练习。
    【WebDriver】WebDriver 常用操作
    【Loadrunner】Loadrnner 参数化策略
    ES6系列_11之Set和WeakSet数据结构
    ES6系列_10之Symbol在对象中的作用
    ES6系列_9之对象
    ES6系列_8之函数和数组
    ES6系列_7之箭头函数和扩展
  • 原文地址:https://www.cnblogs.com/shenlinken/p/5557736.html
Copyright © 2011-2022 走看看