Linux获取时间
一、获取时间
1.1 获取秒、微秒
Linux中获取微秒级时间的系统调用gettimeofday()
,但是返回值的准确性依赖于系统的架构。
1 | #include <sys/time.h> |
其中timeval
结构体定义如下
1 | struct timeval { |
time()
系统调用返回自Epoch( 1970年1月1日00:00:00 )以来的秒数,如果p_time
参数不为空,则会将返回值置于p_time
指向的位置。
1 | #include <time.h> |
二、时间转换
2.1 time_t和可打印的格式
ctime()
提供了一种简单的将时间转成字符串格式的转换方式。
1 | #include <time.h> |
注:在SUSv3规定,调用ctime()
、gmtime()
、localTime()
或asctime()
中的任一个函数,都可能覆盖其它函数的返回
2.2 time_t和分解的格式
gmtime()
可以把日历时间转换成一个对应UTC的分解的时间;localTime()
考虑时区和夏令时的设置,返回对应系统本地时间的分解时间
1 | #include <time.h> |
1 | // 分解时间结构体 |
2.3 分解的格式与可打印格式
asctime()
将分解的格式转换成可打印的格式,指向由静态分配的字符串
1 | #include <time.h> |
strftime()
在将分解的时间转换成可打印的格式时提供更为精确的控制。
1 | #include <time.h> |
format参数定义:
说明符 | 描述 | 实例 |
---|---|---|
%a | 星期几的缩写 | Tue |
%A | 星期几的全称 | Tuesday |
%b | 月份名称的缩写 | Feb |
%B | 月份全称 | February |
%c | 日期和时间 | Tue Feb 1 21:39:46 2011 |
%d | 一月中的一天(两位数字,01-31) | 01 |
%D | 美国日期的格式(同%m%d%y) | 02/01/2011 |
%e | 一月中的一天(两个字符) | 1 |
%F | ISO格式的日期(%Y-%m-%d) | 2011-02-01 |
%H | 24 小时格式的小时(两位数,00-23) | 21 |
%I | 12 小时格式的小时(两位数,01-12) | 09 |
%j | 一年中的第几天(三位数,001-366) | 032 |
%m | 十进制数表示的月份(两位,01-12) | 08 |
%M | 分(两位,00-59) | 55 |
%p | AM 或 PM 名称 | PM |
%P | 上午/下午(GNU扩展) | pm |
%R | 24小时制的时间(%H:%M) | 21:39 |
%S | 秒(00-61) | 46 |
%T | 时间(%H:%M:%S) | 21:39:46 |
%u | 星期几编号(1-7) | 2 |
%U | 一年中的第几周,以第一个星期日作为第一周的第一天(00-53) | 05 |
%w | 十进制数表示的星期几,星期日表示为 0(0-6) | 2 |
%W | 一年中的第几周,以第一个星期一作为第一周的第一天(00-53) | 05 |
%x | 日期表示法(本地化) | 02/01/2011 |
%X | 时间表示法(本地化) | 21:39:46 |
%y | 两位数字年份,最后两个数字(00-99) | 11 |
%Y | 四位数字年份 | 2011 |
%Z | 时区的名称或缩写 | CET |
%% | 一个 % 符号 | % |
strptime()
是strftime()
的逆向函数,将包含日期的字符串转换成分解的时间
1 | #define _XOPNE_SOURCE |
转换图
下图来自Linux/Unix系统编程手册
原文链接: https://www.delta1037.cn/2020/Linux/Linux获取时间/
版权声明: 转载请注明出处.