分享mkgmttime自实现功能。
1 /*** 2 * @Author : yangzijian 3 * @Description : main 4 * @Date : 2021-01-25 15:21:31 5 */ 6 7 #include <stdio.h> 8 #include <iostream> 9 #include <stdlib.h> 10 #include "UTCTime.h" 11 12 using namespace std; 13 namespace 14 { 15 const int SecondsPerMinute = 60; 16 const int SecondsPerHour = 3600; 17 const int SecondsPerDay = 86400; 18 const int DaysOfMonth[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; 19 int timeZone = 8; 20 bool IsLeapYear(short year) 21 { 22 if (year % 4 != 0) 23 return false; 24 if (year % 100 != 0) 25 return true; 26 return (year % 400) == 0; 27 } 28 29 time_t mkgmtime(tm* const _Tm) 30 { 31 time_t secs = 0; 32 int realYear = _Tm->tm_year + 1900; 33 int passYear = realYear - 1970; 34 int fhLeapYear = (realYear / 400 - 4); 35 int fLeapYear = realYear / 4 - 1970 / 4; 36 int hLeapYear = realYear / 100 - 1970 / 100; 37 int LeapYear = fLeapYear + fhLeapYear - hLeapYear; 38 int normalYear = passYear - LeapYear; 39 secs += LeapYear * 366 * SecondsPerDay + normalYear * 365 * SecondsPerDay; 40 secs += DaysOfMonth[_Tm->tm_mon] * SecondsPerDay; 41 if (IsLeapYear(realYear)) 42 { 43 secs += SecondsPerDay; 44 } 45 secs += (_Tm->tm_mday - 1) * SecondsPerDay; 46 secs += _Tm->tm_hour * SecondsPerHour; 47 secs += _Tm->tm_min * SecondsPerMinute; 48 secs += _Tm->tm_sec; 49 return secs; 50 } 51 52 time_t GetUtcStamp() 53 { 54 return time(0); 55 } 56 57 time_t UtcStampToLocalStamp(time_t t) 58 { 59 return t + ((time_t)timeZone) * 3600; 60 } 61 62 time_t GetLocalStamp() 63 { 64 return UtcStampToLocalStamp(GetUtcStamp()); 65 } 66 67 tm* GetLocalTime() 68 { 69 time_t utcTime = GetLocalStamp(); 70 return gmtime(&utcTime); 71 } 72 } 73 74 int main() 75 { 76 tm* _Tm = GetLocalTime(); 77 time_t targetTime = _mkgmtime(_Tm); // 转换成 gmt 时间 mktime 会根据系统时区做转换 78 time_t targetTime2 = mkgmtime(_Tm); // 转换成 gmt 时间 mktime 会根据系统时区做转换 79 80 81 system("pause"); 82 return 0; 83 }
懒得写注释了,大家随便看看吧...