分享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 }

懒得写注释了,大家随便看看吧... 

posted @ 2022-09-21 20:27  BackSword  阅读(83)  评论(0编辑  收藏  举报