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获取时间/
版权声明: 转载请注明出处.