.- .
将由 struct tm
表示的 UTC 时间转换为由 time_t
类型表示的 UTC 时间。
语法
time_t _mkgmtime(
struct tm* timeptr
);
__time32_t _mkgmtime32(
struct tm* timeptr
);
__time64_t _mkgmtime64(
struct tm* timeptr
);
参数
timeptr
指向 UTC 时间的指针作为要转换的 struct tm
。
返回值
类型 __time32_t
或 __time64_t
的数量表示自协调世界时 (UTC) 1970 年 1 月 1 日午夜起经过的秒数。 如果日期超出范围(参见“备注”部分)或输入不能解释为有效时间,则返回值为 -1。
注解
_mkgmtime32
和 _mkgmtime64
函数将 UTC 时间转换为表示 UTC 时间的 __time32_t
或 __time64_t
类型。 要将本地时间转换为 UTC 时间,请改用 mktime
、_mktime32
和 _mktime64
。
_mkgmtime
是计算出 _mkgmtime64
的内联函数,且 time_t
等同于 __time64_t
。 如果需要强制编译器将 time_t
解释为旧的 32 位 time_t
,你可以定义 _USE_32BIT_TIME_T
。 不建议使用,因为在 2038 年 1 月 18 日之后,应用程序可能会无法正常工作,最大范围为 32 位 time_t
。 在 64 位平台上完全无法使用。
传入的时间结构将按照与 _mktime
函数相同的方式进行更改:根据 tm_mday
和 tm_year
的值将 tm_wday
和 tm_yday
字段设置为新值。 由于时间假定为 UTC,因此将忽略该 tm_isdst
字段。
_mkgmtime32
函数的范围为从 UTC 时间 1970 年 1 月 1 日午夜到 UTC 时间 2038 年 1 月 18 日 23:59:59。 _mkgmtime64
的范围为从 1970 年 1 月 1 日 (UTC) 午夜到 3000 年 12 月 31 日 23:59:59 (UTC)。 日期超出范围会导致返回值为 -1。 _mkgmtime
的范围取决于是否定义了 _USE_32BIT_TIME_T
。 未定义时(为默认值时),范围与 _mkgmtime64
相同。 否则,范围限制为 32 位 _mkgmtime32
。
gmtime
和 localtime
均使用通用静态缓冲区进行转换。 如果你为 _mkgmtime
提供此缓冲区,则会损坏之前的内容。
示例
// crt_mkgmtime.c
#include <stdio.h>
#include <time.h>
int main()
{
struct tm t1, t2;
time_t now, mytime, gmtime;
char buff[30];
time( & now );
_localtime64_s( &t1, &now );
_gmtime64_s( &t2, &now );
mytime = mktime(&t1);
gmtime = _mkgmtime(&t2);
printf("Seconds since midnight, January 1, 1970\n");
printf("My time: %I64d\nGM time (UTC): %I64d\n\n", mytime, gmtime);
/* Use asctime_s to display these times. */
_localtime64_s( &t1, &mytime );
asctime_s( buff, sizeof(buff), &t1 );
printf( "Local Time: %s\n", buff );
_gmtime64_s( &t2, &gmtime );
asctime_s( buff, sizeof(buff), &t2 );
printf( "Greenwich Mean Time: %s\n", buff );
}
Seconds since midnight, January 1, 1970
My time: 1171588492
GM time (UTC): 1171588492
Local Time: Thu Feb 15 17:14:52 2007
Greenwich Mean Time: Fri Feb 16 01:14:52 2007
以下示例演示了 _mkgmtime
对不完整结构的填充方式。 它计算一周和一年中某天的值。
// crt_mkgmtime2.c
#include <stdio.h>
#include <time.h>
#include <memory.h>
int main()
{
struct tm t1, t2;
time_t gmtime;
char buff[30];
memset(&t1, 0, sizeof(struct tm));
memset(&t2, 0, sizeof(struct tm));
t1.tm_mon = 1;
t1.tm_isdst = 0;
t1.tm_year = 103;
t1.tm_mday = 12;
// The day of the week and year will be incorrect in the output here.
asctime_s( buff, sizeof(buff), &t1);
printf("Before calling _mkgmtime, t1 = %s t.tm_yday = %d\n",
buff, t1.tm_yday );
gmtime = _mkgmtime(&t1);
// The correct day of the week and year were determined.
asctime_s( buff, sizeof(buff), &t1);
printf("After calling _mkgmtime, t1 = %s t.tm_yday = %d\n",
buff, t1.tm_yday );
}
Before calling _mkgmtime, t1 = Sun Feb 12 00:00:00 2003
t.tm_yday = 0
After calling _mkgmtime, t1 = Wed Feb 12 00:00:00 2003
t.tm_yday = 42
另请参阅
工时管理
%>
%>
.- .
.- .
.- .
.- .
.- .