C语言实现格林威治时间转北京时间+根据日期计算星期几


【北京时间=GMT时间+8小时】

/** main.c**  Created on: 2021年12月16日*      Author: hello*/#include <stdint.h>
#include <stdio.h>#define debug(...) do{printf(__VA_ARGS__);fflush(stdout);}while(0)typedef struct
{int year;int month;int day;int hours;int minutes;int seconds;int weekday;
}mytime_t;/// 返回值: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);  /* 重新计算周 */
}int main()
{mytime_t utctime;utctime.year = 2021;utctime.month = 12;utctime.day = 16;utctime.hours = 8;utctime.minutes = 16;utctime.seconds = 30;utctime.weekday = 4;debug("utc      : %04d-%02d-%02d %02d:%02d:%02d %d\r\n",utctime.year,utctime.month,utctime.day,utctime.hours,utctime.minutes,utctime.seconds,utctime.weekday);UTCToBeijing(&utctime);debug("beijing  : %04d-%02d-%02d %02d:%02d:%02d %d\r\n",utctime.year,utctime.month,utctime.day,utctime.hours,utctime.minutes,utctime.seconds,utctime.weekday);return 0;
}

程序运行结果:

C语言实现格林威治时间转北京时间+根据日期计算星期几相关推荐

  1. 物联网设备获取北京时间、年月日、星期几,GMT格林威治标准时间转换为北京时间,授时api Fiddler抓包调试

    1. 获取北京时间.年月日 授时api 苏宁获取北京时间的api不要太方便:http://quan.suning.com/getSysTime.do 使用 Fiddler抓包调试,查看HTTP返回报文 ...

  2. C语言实现Unix时间戳和北京时间的相互转换(已编译,亲试可用~)

    目录 一.什么是Unix时间戳 二.应用C语言库函数 三.C语言实现Unix时间戳与北京时间的相互转换 一.什么是Unix时间戳     1.Unix时间戳是从1970年1月1日(UTC/GMT的午夜 ...

  3. c语言utc时间转换北京时间_C/C++标准库之转换UTC时间到local本地时间详解

    前言 UTC 时间DateTime.UtcNow 和 系统本地时间 DateTime.Now 相差8个时区 ,美国本地时间和北京时间相差15个时区: 美国,而一般使用UTC时间方便统一各地区时间差异. ...

  4. 获取北京时间授时api stm32 esp8266获取北京时间、年月日、星期api GMT格林威时间转换北京时间

    苏宁获取北京时间的api不要太方便:http://quan.suning.com/getSysTime.do 使用 Fidder抓包调试,查看HTTP返回报文: 双击左侧抓取到的HTTP返回报文.使用 ...

  5. php输出世界时转北京时,php中把美国时间转为北京时间的自定义函数分享

    php中把美国时间转为北京时间的自定义函数分享 由于最近做邮件系统用到了时间转化,需要把从谷歌gmail下载下来的邮件时间转化为北京时间,于是乎就写了一个时间转化函数,希望对有需要的盆友所有启迪,我们 ...

  6. UTC时间与北京时间相互转换

    第一种方法 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. public class HomeController ...

  7. php时区改美东,美国东部时间与北京时间换算(美国中国时间换算器)

    美国东部时间1.29日 晚上七点到晚上八点 北京时间!! 艾薇儿在网上和fans. 目前的美国东部时间,比我们慢13个小时,比如现在我们是下午两点,那么他们是当天的凌晨1点.对于你说的东部时间晚上7点 ...

  8. JavaScript把世界各地客户端时间转为北京时间,并取得时间戳

    1.把客户端时间转换为北京时间 function getBeijingtime() {//获得当前运行环境时间var d = new Date();currentDate = new Date();t ...

  9. C#之Unix时间和北京时间互转

    Unix时间起始时间为1970年1月1日0时0分0秒 北京时间起始时间为1970年1月1日8时0分0秒 北京时间转Unix时间如下: DateTime dtUnix = new DateTime(19 ...

  10. Internet时间自动同步后,计算机系统时间比北京时间不能同步一致

    环景: win10 专业版 2019AD域环境 IPguard管控客户端 问题描述: 与time.windows.com,Internet时间自动同步后,计算机系统时间比北京时间慢一分钟,有时又快一分 ...

最新文章

  1. Ubuntu 13.10 安装Terminalx 后更改默认终端设置
  2. 【全栈React】第6天: 状态
  3. 动态规划入门_数塔问题
  4. UVA - 10061 How many zero#39;s and how many digits ?
  5. Linux inode与文件系统关系
  6. python列表数据类型一致_python自学——数据类型之列表
  7. 电商促销惊喜海报设计模板,会讲故事的素材
  8. careercup-递归和动态规划 9.10
  9. BOSON cisco设备模拟器6.0+注册机
  10. LintCode:尾部的零
  11. insert into 插入空值_常州插入式涡轮流量计旋进旋涡流量计价格-玮偌自控系统...
  12. 【CNN】94页论文综述卷积神经网络:从基础技术到研究前景
  13. Ubuntu图形化数据库连接工具
  14. 服务器无线路由器桥接,三个无线路由器怎么设置桥接
  15. pigoss BSM 售前使用问题总结2(FAQ)
  16. Appium 自动化测试 滑动 Swipe 详解
  17. ppspp android编译,PPSSPP模拟器通用设置,伪福利
  18. 新茶饮式资本扩张,该停脚歇歇了
  19. 《你是我的荣耀》制片人张萌犯受贿罪:被判处有期徒刑三年
  20. 补充方法的声明及使用:

热门文章

  1. “金三银四” 是找工作的最佳时期吗?
  2. 经历“海潮效应”,云图如何成为智能家居界的苹果?
  3. C++运算符重载 ++,--,+,-,+=,-=,输出输入运算符
  4. W806芯片性能测试
  5. hcia华为认证学习
  6. form表单提交的几种方式
  7. 个人对于常微分方程之一阶线性非齐次方程的常数变易法的见解
  8. python中quadratic,Python: Using CVXOPT for quadratic programming
  9. linux 中移动文件_如何在Linux中移动文件
  10. html怎么混合颜色,CSS3 多色混合背景