_mkgmtime
、 、 _mkgmtime32
_mkgmtime64
將以 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_wday
和 欄位會根據 和 tm_yday
tm_year
的值設定為新的值tm_mday
。 因為時間假設為 UTC, tm_isdst
因此會忽略欄位。
_mkgmtime32
函式的範圍是從 1970 年 1 月 1 日午夜 (UTC) 到 2038 年 1 月 18 日 23:59:59 (UTC)。 _mkgmtime64
的範圍是從 1970 年 1 月 1 日午夜 (UTC) 到 3000 年 12 月 31 日 23:59:59 (UTC)。 超出範圍的日期會產生 -1 的傳回值。 _mkgmtime
的範圍取決於是否定義 _USE_32BIT_TIME_T
。 如果未定義,也就是預設值,範圍會與 _mkgmtime64
相同。 否則,範圍會限製為的 _mkgmtime32
32位範圍。
和都會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
另請參閱
時間管理
asctime
, _wasctime
asctime_s
, _wasctime_s
gmtime
、 、 _gmtime32
_gmtime64
gmtime_s
、 、 _gmtime32_s
_gmtime64_s
localtime_s
、 、 _localtime32_s
_localtime64_s
mktime
、 、 _mktime32
_mktime64
time
、 、 _time32
_time64