• C++获取当前系统时间并格式化输出


    C++中与系统时间相关的函数定义在头文件中。
    一、time(time_t * )函数
    函数定义如下:

    time_t time (time_t* timer);
    

    获取系统当前日历时间 UTC 1970-01-01 00:00:00开始的unix时间戳

    Coordinated Universal Time(UTC)
    协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。

    参数:
    timer 存取结果的时间指针变量,类型为time_t,指针变量可以为null。
    如果timer指针非null,则time()函数返回值变量与timer指针一样,都指向同一个内存地址;
    否则如果timer指针为null,则time()函数返回一个time_t变量时间。
    返回值,如果成功,获取当前系统日历时间,否则返回 -1。

    二、结构体 struct tm中的属性

    struct tm 
    {
            int tm_sec;     /* seconds after the minute - [0,59] */
            int tm_min;     /* minutes after the hour - [0,59] */
            int tm_hour;    /* hours since midnight - [0,23] */
            int tm_mday;    /* day of the month - [1,31] */
            int tm_mon;     /* months since January - [0,11] */
            int tm_year;    /* years since 1900 */
            int tm_wday;    /* days since Sunday - [0,6] */
            int tm_yday;    /* days since January 1 - [0,365] */
            int tm_isdst;   /* daylight savings time flag */
    };
    

    这结构体,编译器内置。

    变量 类型 说明 范围
    tm_sec int 每分钟的秒数 [0 - 61]
    tm_min int 每小时后面的分钟数 [0 - 59]
    tm_hour int 凌晨开始的小时数 [0 - 23]
    tm_mday int 从每月份开始算的天数 [1 - 31]
    tm_mon int 从一月份开始的月份数 [0 - 11]
    tm_year int 从1900年开始的年数 None
    tm_wday int 从每周天开始算的天数 [0 - 6]
    tm_yday int 一年的第几天,从零开始 [0 - 365]
    tm_isdst int 夏令时 None

    这里有几个地方要注意:

    1. tm_sec 在C89的范围是[0-61],在C99更正为[0-60]。通常范围是[0-59],只是某些系统会出现60秒的跳跃。
    2. tm_mon 是从零开始的,所以一月份为0,十二月份为11,计算月份的时候需要加1。
    3. tm_year 计算年份的时候需要加上1900

    也可以使用本地时间函数p=localtime(time_t* nowtime)将nowtime变量中的日历时间转化为本地时间

    使用方法:
    sec1:上面的方法

    #include <ctime>
    #include <cstdio>
    #using namespace std;
    int main()
    {
    	time_t nowtime;
    	//首先创建一个time_t 类型的变量nowtime
    	struct tm* p;
    	//然后创建一个新时间结构体指针 p 
    	time(&nowtime);
    	//使用该函数就可得到当前系统时间,使用该函数需要将传入time_t类型变量nowtime的地址值。
    	p = localtime(&nowtime);
    	//由于此时变量nowtime中的系统时间值为日历时间,我们需要调用本地时间函数p=localtime(time_t* nowtime)将nowtime变量中的日历时间转化为本地时间,存入到指针为p的时间结构体中。不改的话,可以参照注意事项手动改。
    	printf("%02d:%02d:%02d
    ",p->tm_hour,p->tm_min,p->tm_sec);
    	//控制格式输出
    	return 0;
    }
    

    sec2:借助 strftime()函数

    size_t strftime(
    char *strDest, //目标字符串
    size_t maxsize,//最多传出字符数量
    const char *format,//格式化方式
    const  struct tm *timeptr //tm指针,上文讲的那个
    );
    

    我们单独拿出 *format

    %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 每周的第几天,星期一为第一天 (值从17,星期一为1%U 第年的第几周,把星期日作为第一天(值从053%V 每年的第几周,使用基于周的年
    %w 十进制表示的星期几(值从06,星期天为0%W 每年的第几周,把星期一做为第一天(值从053%x 标准的日期串
    %X 标准的时间串
    %y 不带世纪的十进制年份(值从099%Y 带世纪部分的十制年份
    %z,%Z 时区名称,如果不能得到时区名称则返回空字符。
    

    举例子

    strftime(tmpbuf,128,"Todayis%A,day%dof%Bintheyear%Y.
    ",newtime);
    //Today is Saturday, day 30 of July in the year 2005.
    
    strftime(timE,80,"Data:
    %Y-%m-%d
    Time:
    %I:%M:%S
    ",timeinfo);
    //Data:
    //2010-09-02
    //Time:
    //04:22:11
    strftime(str,sizeof(str),"Itisnow%I%p",ptr);
    //It is now 4PM
    

    具体调用方式

    #include <iostream>
    #include <time.h>
    using namespace std;
    
    int main()
    {
        time_t timep;
        time(&timep);
        char tmp[256];
        strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M:%S", localtime(&timep));
        cout << tmp << endl;
        return 0;
    }
    
  • 相关阅读:
    Android 请求运行时权限
    Android 调试技巧之快速重启生效
    ubuntu 用aptitude代替apt-get处理依赖性问题
    Learning Git by Animations
    Android调试技巧
    Android O PackageInstaller 解析
    阅读代码工具:Visual Studio Code
    Android 缓存策略demo
    |= 和 &= ~
    Android 逆向工具
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798438.html
Copyright © 2020-2023  润新知