C 库函数
time_t mktime(struct tm *timeptr)
把
timeptr
所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数,发生错误时返回-1。
下面是 mktime() 函数的声明。
time_t mktime(struct tm *timeptr)
timeptr
-- 这是指向表示日历时间的 time_t 值的指针,该日历时间被分解为以下各部分。下面是 timeptr 结构的细节:
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 到 11 */
int tm_year; /* 自 1900 起的年数 */
int tm_wday; /* 一周中的第几天,范围从 0 到 6 */
int tm_yday; /* 一年中的第几天,范围从 0 到 365 */
int tm_isdst; /* 夏令时 */
该函数返回自 1970 年 1 月 1 日以来持续时间的秒数。如果发生错误,则返回 -1 值。
下面的实例演示了 mktime() 函数的用法。
#include <stdio.h>
#include <time.h>
int
main
(
)
{
int
ret
;
struct
tm info
;
char
buffer
[
80
]
;
info.
tm_year
=
2021
-
1900
;
info.
tm_mon
=
7
-
1
;
info.
tm_mday
=
4
;
info.
tm_hour
=
0
;
info.
tm_min
=
0
;
info.
tm_sec
=
1
;
info.
tm_isdst
=
-
1
;
ret
=
mktime
(
&
info
)
;
if
(
ret
==
-
1
)
{
printf
(
"Error: unable to make time using mktime
\n
"
)
;
}
else
{
strftime
(
buffer
,
sizeof
(
buffer
)
,
"%c"
,
&
info
)
;
printf
(
buffer
)
;
return
(
0
)
;
让我们编译并运行上面的程序,这将产生以下结果:
Sun Jul 4 00:00:01 2021
#include
<
stdio.h
>
/* printf, scanf */
#include
<
time.h
>
/* time_t, struct tm, time, mktime */
int
main
(
)
time_t
rawtime
;
struct
tm
*
timeinfo
;
int
year
,
month
,
day
;
const
char
*
weekday
[
]
=
{
"
周日
"
,
"
周一
"
,
"
周二
"
,
"
周三
"
,
"
周四
"
,
"
周五
"
,
"
周六
"
}
;
printf
(
"
年:
"
)
;
fflush
(
stdout
)
;
scanf
(
"
%d
"
,&
year
)
;
printf
(
"
月:
"
)
;
fflush
(
stdout
)
;
scanf
(
"
%d
"
,&
month
)
;
printf
(
"
日:
"
)
;
fflush
(
stdout
)
;
scanf
(
"
%d
"
,&
day
)
;
time
(
&
rawtime
)
;
timeinfo
=
localtime
(
&
rawtime
)
;
timeinfo
->
tm_year
=
year
-
1900
;
timeinfo
->
tm_mon
=
month
-
1
;
timeinfo
->
tm_mday
=
day
;
mktime
(
timeinfo
)
;
printf
(
"
那一天是:%s
\
n
"
,
weekday
[
timeinfo
->
tm_wday
]
)
;
return
0
;
让我们编译并运行上面的程序,这将产生以下结果:
年: 2018
日: 26
那一天是:周四
C 标准库 - <time.h>