- #include <stdint.h>
- #include <stdio.h>
- typedef struct
- {
- int year;
- int month;
- int day;
- int hours;
- int minutes;
- int seconds;
- int weekday;
- }mytime_t;
- mytime_t utctime;
- unsigned int Year,Mon,Day,Shi,Fen,Miao,Zhou;
- /// 返回值:1-7,對應周一到周天
- uint8_t GetWeekDayNum(uint32_t year, uint8_t month, uint8_t day)
- {
- uint32_t weekday = 0U;
- if (month < 3U)
- {
- /*D = { [(23 x month)/9] + day + 4 + year + [(year-1)/4] - [(year-1)/100] + [(year-1)/400] } mod 7*/
- weekday = (((23U * month) / 9U) + day + 4U + year + ((year - 1U) / 4U) - ((year - 1U) / 100U) + ((year - 1U) / 400U)) % 7U;
- }
- else
- {
- /*D = { [(23 x month)/9] + day + 4 + year + [year/4] - [year/100] + [year/400] - 2 } mod 7*/
- weekday = (((23U * month) / 9U) + day + 4U + year + (year / 4U) - (year / 100U) + (year / 400U) - 2U) % 7U;
- }
- if(weekday == 0)
- {
- weekday = 7;
- }
- return (uint8_t)weekday;
- }
- void UTCToBeijing(mytime_t* time)
- {
- uint8_t days = 0;
- if (time->month == 1 || time->month == 3 || time->month == 5 || time->month == 7 || time->month == 8 || time->month == 10 || time->month == 12)
- {
- days = 31;
- }
- else if (time->month == 4 || time->month == 6 || time->month == 9 || time->month == 11)
- {
- days = 30;
- }
- else if (time->month == 2)
- {
- if ((time->year % 400 == 0) || ((time->year % 4 == 0) && (time->year % 100 != 0))) /* 判斷平年還是閏年 */
- {
- days = 29;
- }
- else
- {
- days = 28;
- }
- }
- time->hours += 8; /* 北京時間比格林威治時間快8小時 */
- if (time->hours >= 24) /* 跨天 */
- {
- time->hours -= 24;
- time->day++;
- if (time->day > days) /* 跨月 */
- {
- time->day = 1;
- time->month++;
- if (time->month > 12) /* 跨年 */
- {
- time->year++;
- }
- }
- }
- time->weekday = GetWeekDayNum(time->year, time->month, time->day); /* 重新計算周 */
- }
- void GMT_time()
- {
- //第一步:輸入對應UTC時間
- utctime.year = 2021;
- utctime.month = 12;
- utctime.day =27;
- utctime.hours = 18;
- utctime.minutes = 2;
- utctime.seconds = 10;
- utctime.weekday = 1;
- //第二步:處理
- UTCToBeijing(&utctime);//處理
-
- //第三步:下面就是北京時間
- Year =utctime.yea;
- Mon =utctime.mont;
- Day =utctime.da;
- Shi =utctime.hour;
- Fen =utctime.minutes;
- Miao =utctime.second;
- Zhou =utctime.weekda;
- }
- 原文鏈接:https://blog.csdn.net/qq153471503/article/details/107157470
復制代碼
【北京時間=GMT時間+8小時】
|