简介
- Linux POSIX <time.h> 详解
Linux POSIX <time.h> 详解
<time.h>
是 C 标准库中的一个头文件,用于处理日期和时间相关的操作。它同时也是 POSIX 操作系统接口的一部分,提供了在 POSIX 兼容环境下处理时间的函数和类型。
以下是 <time.h>
中一些关键组成部分的详解:
时间类型:
**
time_t
**:表示自 1970 年 1 月 1 日 00:00:00 UTC(称为 Epoch)以来经过的秒数。它通常用于存储和操作时间值。**
struct tm
**:表示一个日期和时间,以其各个组成部分表示(例如年、月、日、小时、分钟、秒等)。
函数:
**
time()
**:从系统时钟获取当前时间,并以time_t
值的形式返回。**
gmtime()
**:将time_t
值转换为包含 UTC 时间的struct tm
结构。**
localtime()
**:将time_t
值转换为包含本地时间的struct tm
结构,已经根据当前时区进行了调整。**
mktime()
**:将struct tm
时间表示转换为time_t
值。**
strftime()
**:根据格式字符串,将struct tm
时间值格式化为指定的字符串表示形式。**
difftime()
**:计算两个time_t
值之间的差异,以秒为单位返回差值。
常量:
Epoch:定义为时间的起始点,通常被表示为 1970 年 1 月 1 日(00:00:00 UTC)。
与日期/时间计算相关的常量:比如
SECONDS_PER_MINUTE
(每分钟秒数)、SECONDS_PER_HOUR
(每小时秒数)、SECONDS_PER_DAY
(每天秒数)等,用于时间计算。
时间操作:
通过 <time.h>
,你可以进行各种时间相关的操作,比如:
- 获取当前时间和日期。
- 在不同的时间表示之间进行转换(比如
time_t
和struct tm
)。 - 将时间值格式化为字符串。
- 对时间值进行算术运算。
示例:
1 |
|
这个示例演示了如何使用 <time.h>
中的函数获取当前本地时间和日期,并将其打印到控制台。
请注意,虽然 <time.h>
提供了在 C 中进行基本日期和时间操作的功能,但是对于更高级的操作或在 C++ 中进行操作时,可能有更现代和功能更强大的库可用,比如 C++ 中的 <chrono>
,或者其他库提供的更高级抽象。
Linux POSIX <time.h> time() 详解
time()
是 POSIX 操作系统中 <time.h>
头文件中所定义的一个函数,用于获取当前系统时间,并以 time_t
格式返回从 Epoch(1970 年 1 月 1 日 00:00:00 UTC)到当前时间经过的秒数。
函数签名:
1 | time_t time(time_t *seconds); |
- 返回值:返回一个
time_t
类型的值,表示自 Epoch 起至当前时间经过的秒数。 - 参数:
seconds
(可选):一个指向time_t
类型变量的指针。如果不为NULL
,函数会把获取到的当前时间也存储在这个指针所指向的位置,以便于进一步使用。
示例:
1 |
|
解释示例:
- 引入
<stdio.h>
和<time.h>
头文件。 - 声明一个
time_t
类型的变量currentTime
。 - 使用
time(NULL)
函数来获取当前时间,NULL
作为参数意味着函数只返回当前时间,不将其存储到其他地方。 - 使用
printf()
将获取的当前时间值打印出来。
注意事项:
time()
函数返回的时间值通常是自 Epoch(1970 年 1 月 1 日 00:00:00 UTC)起至当前时间的秒数。这个值的精度因系统而异,一般是秒级别的精度。- 如果
seconds
参数不为NULL
,则会将当前时间的值保存到这个参数所指向的位置,方便进一步处理。
time()
函数在 C 编程中常用于获取时间戳或者记录程序运行时间等任务。
Linux POSIX <time.h> gmtime() 详解
gmtime()
是 POSIX 操作系统中 <time.h>
头文件中定义的一个函数,用于将 time_t
类型的时间值(从 Epoch 起的秒数)转换为一个 UTC(协调世界时)时间的结构体表示,即 struct tm
类型。
函数签名:
1 | struct tm *gmtime(const time_t *timep); |
- 返回值:返回一个指向
struct tm
结构体的指针,其中包含了由time_t
值表示的 UTC 时间的各个分量。 - 参数:
timep
:一个指向time_t
类型变量的指针,表示待转换的时间值。
struct tm
结构体定义:
struct tm
结构体包含了表示时间的各个成员变量,例如年、月、日、小时、分钟、秒等,它的定义通常如下:
1 | struct tm { |
示例:
1 |
|
解释示例:
- 引入
<stdio.h>
和<time.h>
头文件。 - 声明一个
time_t
类型的变量currentTime
和一个指向struct tm
的指针utcTime
。 - 使用
time(NULL)
函数获取当前时间。 - 使用
gmtime(¤tTime)
函数将获取的时间转换为 UTC 时间,并将结果保存在utcTime
指针指向的位置。 - 使用
printf()
打印 UTC 时间的各个成员变量,需要注意月份应加一、年份需要加上 1900。
gmtime()
函数将 time_t
类型的时间值转换为 UTC 时间的结构体表示,方便对时间进行更详细的分析和处理。
Linux POSIX <time.h> localtime() 详解
localtime()
是 POSIX 操作系统中 <time.h>
头文件中定义的一个函数,用于将 time_t
类型的时间值(从 Epoch 起的秒数)转换为一个本地时间的结构体表示,即 struct tm
类型。
函数签名:
1 | struct tm *localtime(const time_t *timep); |
- 返回值:返回一个指向
struct tm
结构体的指针,其中包含了由time_t
值表示的本地时间的各个分量。 - 参数:
timep
:一个指向time_t
类型变量的指针,表示待转换的时间值。
struct tm
结构体定义:
struct tm
结构体包含了表示时间的各个成员变量,例如年、月、日、小时、分钟、秒等,它的定义通常如下:
1 | struct tm { |
示例:
1 |
|
解释示例:
- 引入
<stdio.h>
和<time.h>
头文件。 - 声明一个
time_t
类型的变量currentTime
和一个指向struct tm
的指针localTime
。 - 使用
time(NULL)
函数获取当前时间。 - 使用
localtime(¤tTime)
函数将获取的时间转换为本地时间,并将结果保存在localTime
指针指向的位置。 - 使用
printf()
打印本地时间的各个成员变量,需要注意月份应加一、年份需要加上 1900。
localtime()
函数将 time_t
类型的时间值转换为本地时间的结构体表示,这样就可以方便地对时间进行更详细的分析和处理,并以易读的形式输出。
Linux POSIX <time.h> mktime() 详解
mktime()
是 POSIX 操作系统中 <time.h>
头文件中定义的一个函数,用于将一个表示日期和时间的 struct tm
结构体转换为 time_t
类型的时间值(从 Epoch 起的秒数)。
函数签名:
1 | time_t mktime(struct tm *timeptr); |
- 返回值:返回一个
time_t
类型的值,表示由struct tm
结构体表示的时间值,即从 Epoch 起的秒数。 - 参数:
timeptr
:一个指向struct tm
结构体的指针,表示待转换为time_t
类型的时间值。
示例:
1 |
|
解释示例:
- 引入
<stdio.h>
和<time.h>
头文件。 - 声明一个
struct tm
类型的变量dateTime
和一个time_t
类型的变量timeValue
。 - 填充
struct tm
结构体dateTime
中的年、月、日、小时、分钟、秒等成员变量。 - 使用
mktime(&dateTime)
函数将struct tm
结构体转换为time_t
类型的时间值,并将结果保存在timeValue
变量中。 - 使用
printf()
打印转换后的时间值(从 Epoch 起的秒数)。
mktime()
函数将日期和时间信息从 struct tm
结构体转换为 time_t
类型的时间值,方便在不同的时间表示之间进行转换。
Linux POSIX <time.h> strftime() 详解
strftime()
是 POSIX 操作系统中 <time.h>
头文件中定义的一个函数,用于将 struct tm
结构体表示的时间值格式化为指定格式的字符串。
函数签名:
1 | size_t strftime(char *s, size_t maxsize, const char *format, const struct tm *timeptr); |
- 返回值:返回生成的字符串的字符数(不包括空字符
\0
),如果格式化失败或者输出的字符串超出了maxsize
的限制,则返回 0。 - 参数:
s
:一个指向字符数组的指针,用于存储生成的格式化后的字符串。maxsize
:字符数组s
的最大长度,以防止溢出。format
:一个表示输出格式的字符串。该格式字符串可以包含转换说明符以及普通字符。timeptr
:一个指向struct tm
结构体的指针,表示待格式化的时间值。
示例:
1 |
|
解释示例:
- 引入
<stdio.h>
和<time.h>
头文件。 - 声明一个
struct tm
类型的变量dateTime
和一个字符数组buffer
。 - 填充
struct tm
结构体dateTime
中的年、月、日、小时、分钟、秒等成员变量。 - 使用
strftime()
函数将struct tm
结构体中的时间信息格式化为字符串,按照给定的格式"%Y-%m-%d %H:%M:%S"
(表示年-月-日 时:分:秒)。 - 生成的格式化后的字符串保存在
buffer
数组中,并使用printf()
打印出来。
strftime()
函数可以根据指定的格式将 struct tm
结构体表示的时间值格式化为字符串,非常方便用于生成各种不同格式的日期时间字符串。
Linux POSIX <time.h> difftime() 详解
difftime()
是 POSIX 操作系统中 <time.h>
头文件中定义的一个函数,用于计算两个 time_t
类型的时间值之间的差异,返回结果以秒为单位。
函数签名:
1 | double difftime(time_t time1, time_t time0); |
- 返回值:返回一个
double
类型的值,表示两个时间值之间的差异(以秒为单位)。 - 参数:
time1
:第一个time_t
类型的时间值。time0
:第二个time_t
类型的时间值。
示例:
1 |
|
解释示例:
- 引入
<stdio.h>
和<time.h>
头文件。 - 声明
time_t
类型的变量currentTime
、startTime
和double
类型的变量difference
。 - 使用
time(NULL)
获取当前时间戳currentTime
,并将特定日期时间的时间戳(2021-12-06 12:00:00
)存储在startTime
变量中。 - 使用
difftime()
函数计算当前时间currentTime
和特定起始时间startTime
之间的差异。 - 将计算得到的时间差异(秒数)显示在控制台上。
difftime()
函数可用于计算两个 time_t
类型的时间值之间的差异,常用于测量时间间隔或计算程序执行时间等场景。