UTC秒数与年月日时分秒的转换

闰年是指公历中每四年中有一个多出来的闰日(2月29日)的年份。判断一个年份是否为闰年,可以按照以下规则进行判断:

如果一个年份能够被4整除,但不能被100整除,则它是闰年。例如,2004年是闰年,因为2004可以被4整除,但不能被100整除。
如果一个年份能够被100整除,但同时也能够被400整除,则它也是闰年。例如,2000年是闰年,因为2000既能够被100整除,又能够被400整除。
根据上述规则,可以得出结论:

能够被4整除且不能被100整除的年份是闰年。
能够被100整除且同时也能够被400整除的年份是闰年。
以下是一些示例:

2024年能够被4整除,但不能被100整除,因此是闰年。
2100年能够被100整除,但不能同时被400整除,因此不是闰年。
2000年能够被100整除,同时也能够被400整除,因此是闰年。
需要注意的是,闰年的目的是为了调整日历与地球公转周期的不完全对齐。闰年的闰日(2月29日)使得每年的平均长度接近365.2425天,接近地球公转周期。

gmtime函数是用来将时间戳转换为struct tm结构体的函数,其中包含了年、月、日、时、分、秒等时间信息。下面是一个简化的示例实现,展示了gmtime函数的大致计算方法:

#include <time.h>

struct tm *gmtime(const time_t *timep) {
static struct tm result;
time_t time = *timep;

// 计算秒数
result.tm_sec = time % 60;
time /= 60;// 计算分钟
result.tm_min = time % 60;
time /= 60;// 计算小时
result.tm_hour = time % 24;
time /= 24;// 计算年份
int days = time;
int year = 1970;while (days >= 365) {if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {if (days >= 366) {days -= 366;} else {break;}} else {days -= 365;}year++;
}result.tm_year = year - 1900;// 计算月份和日期
int month_lengths[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {month_lengths[1] = 29;  // 闰年2月有29天
}int month = 0;
while (days >= month_lengths[month]) {days -= month_lengths[month];month++;
}result.tm_mon = month;
result.tm_mday = days + 1;// 其他字段的计算(例如星期几等)省略...return &result;

}
这个示例实现中,首先将传入的时间戳timep保存到本地变量time中。然后,通过一系列的计算,将时间戳转换为年、月、日、时、分、秒等时间信息,并填充到静态的struct tm结构体result中。

计算秒数、分钟和小时的方法很简单,只需将时间戳按照60、60和24取余即可。

计算年份的方法是通过循环计算天数,每次减去一年的天数(365或366)。在每一年中,如果是闰年(满足闰年条件),则一年有366天,否则一年有365天。直到剩余的天数不足以构成一整年为止。

计算月份和日期的方法是通过一个数组month_lengths来保存每个月份的天数。在闰年中,2月的天数为29天,其他月份的天数与平年相同。通过循环计算剩余的天数,直到剩余的天数不足以构成一个月为止。

需要注意的是,这只是一个简化版的示例实现,实际的gmtime函数的计算方法可能更加复杂,涉及到处理闰年、时区调整等细节。具体的实现可以参考C语言标准库的源代码或特定平台的实现。

mktime函数的具体实现是由C标准库提供的,它通常是由操作系统的C运行时库实现的。实际的实现可能因操作系统和编译器而异,但以下是一种常见的实现算法:

#include <time.h>

time_t mktime(struct tm *timeptr) {
time_t result;
int year, month, day, hour, minute, second;

/* 从tm结构体中获取年、月、日、时、分、秒 */
year = timeptr->tm_year + 1900;
month = timeptr->tm_mon + 1;
day = timeptr->tm_mday;
hour = timeptr->tm_hour;
minute = timeptr->tm_min;
second = timeptr->tm_sec;/* 调整月份和年份 */
month -= 2;
if (month <= 0) {month += 12;year--;
}/* 计算从公元年开始的天数 */
result = year / 4 - year / 100 + year / 400 + 367 * month / 12 + day;
result += year * 365 - 719499;/* 转换为秒数 */
result = (result * 24 + hour) * 60 + minute;
result = result * 60 + second;return result;

}
这个算法首先从struct tm结构体中获取年、月、日、时、分、秒等时间信息,并进行适当的调整。然后,根据公历的规则计算从公元年开始的天数。这个计算包括了闰年的处理,其中每4年有一个闰年,但每100年除非能被400整除,否则不是闰年。

最后,将天数转换为秒数,加上小时、分钟和秒数的偏移量,得到从1970年1月1日00:00:00 UTC到指定时间的秒数。

需要注意的是,这个算法是一个简化的实现,可能不考虑一些特殊情况和细节,比如闰秒和时区调整。实际的mktime函数实现可能会更加复杂,以处理这些情况和细节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/145619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据爬虫分析基于Python+Django旅游大数据分析系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于Python和Django的旅游大数据分析系统是一种使用Python编程语言和Django框架开发的系统&#xff0c;用于处理和分…

DSP生成hex方法

以下使用两种方法生成的HEX文件&#xff0c;亲测可用 &#xff08;1&#xff09;万能法 不管.out文件是哪个版本CCS编译器生成的&#xff0c;只要用HEX2000.exe软件&#xff0c;翻译都可以使用。方法&#xff1a; hex2000 -romwidth 16 -memwidth 16 -i -o 20170817chuankou…

12V升压18V 1A 内置MOS 升压芯片5-35V输入内置MOS升压IC

12V升压18V 1A 内置MOS 升压芯片5-35V输入内置MOS升压IC

vnodeToString函数把vnode转为string(innerhtml)

函数 function vnodeToString(vnode) {// 如果是文本节点&#xff0c;直接返回文本内容if ([string, boolean, undefined, null, number].includes(typeof vnode)) {return vnode;}// 转换节点的属性为字符串形式const attrs Object.keys(vnode.attrs || {}).map((key) > …

数据治理入门

处理模式 模式名称常见场景常见框架批处理夜间几个小时&#xff0c;无人值守hive spark datax流处理7*24H一直运行&#xff0c;无人值守maxwell, flink, flume, kafka即席处理人机交互接口访问 web页面 数据治理的意义 数据质量低&#xff1a;数据错误&#xff0c;不准确或不…

构建坚固防线:提升网站整体安防水平的有效途径

在当今数字化时代&#xff0c;网站安全问题日益突出&#xff0c;如何提升网站整体安防水平成为网站运营者不可忽视的挑战。本文将从高防服务器与CDN的局限性出发&#xff0c;探讨提升网站安防的有效途径&#xff0c;并最终总结其必要性。 高防服务器与CDN的局限性 高防服务器的…

别再吐槽大学教材了,来看看这些网友强推的数学神作!

前言 关于大学数学教材的吐槽似乎从来没停止过。有人慨叹&#xff1a;数学教材晦涩难懂。错&#xff01;难懂&#xff0c;起码还可以读懂。数学教材你根本读不懂&#xff1b;也有人说&#xff1a;数学教材简直就是天书。 数学教材有好有坏&#xff0c;这话不假&#xff0c;但更…

二次元商业计划书PPT模版

二次元商业计划书PPT模版 共&#xff1a;9页 PPT模版&#xff1a; 百度网盘 请输入提取码&#xff1a;ax48

pytorch 模型复现

一般来说&#xff0c;设置相同的随机种子&#xff0c;在相同参数条件下&#xff0c;能使pytorch模型复现出相同的结果。随机种子的设置代码如下&#xff1a; def get_random_seed(seed):random.seed(seed)os.environ[PYTHONHASHSEED] str(seed)np.random.seed(seed)torch.man…

FPGA基础以太网

以太网数据通信 物理层&#xff1a;网线网卡&#xff08;PHY芯片&#xff09; 数据链路层&#xff1a;Mac层(数据有效传输&#xff09; 如图所示&#xff1a;FPGA中的Mac层中的MII接口负责控制PHY芯片&#xff0c;PHY芯片通过网线与PC端进行以太网数据传输。 FPGA中&#xff…

Oracle 服务器日常巡检

文章目录 1、数据库基本状况检查2、数据库相关资源使用情况检查3、检查Oracle数据库性能4、数据库服务器CPU、MEM、I/O性能5、数据库服务器安全检查 Oracle数据库的日常巡检内容包括&#xff1a; &#xff08;1&#xff09;Oracle数据库基本状况检查&#xff1b; &#xff08…

揭露 bbr 的真相

信 bbr 的伙计们&#xff0c;我又要泼冷水了&#xff0c;哈哈。 从先 bbr 的海报开始&#xff0c;相信大家也是被它唬住的&#xff1a; 注意横坐标标度是对数&#xff0c;这就凸显了优势。 把它展开到自然数坐标&#xff0c;再把其它对照画在一个坐标系里&#xff0c;在此之…

让代码变美的第二天 - 策略模式

丑陋的模样 public Fruit buyFruit(String name) {if ("苹果".equals(name)) {return new BuyApple().buy();} else if ("香蕉".equals(name)) {return new BuyBanana().buy();} else if ("西瓜".equals(name)) {// 买西瓜if (true) {// todo} e…

JVM jstat 查看内存新生代老年代回收情况,排查oom

jstat 命令 jstat - [-t] [-h] [ []] option&#xff1a;我们经常使用的选项有gc、gcutil vmid&#xff1a;java进程id interval&#xff1a;间隔时间&#xff0c;单位为毫秒 count&#xff1a;打印次数 每秒打印一次 jstat -gc 9162 1000S0C:年轻代第一个survivor的容量…

实时音视频方案汇总

若有好的方案欢迎留言讨论&#xff0c;非常感谢&#xff0c;汇总了一些&#xff0c;从市面上了解的一些低时延的端到端的方案&#xff0c;仅供参照&#xff0c;若有问题&#xff0c;也欢迎留言更正&#xff01; 方案 方案描述 时延 备注 1大华同轴高清电缆200米电缆&#xf…

致远OA wpsAssistServlet 任意文件上传漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、产品简介 致远OA互联新一代智慧型协同运营平台以中台的架构和技术…

linux effective_protection函数实现

函数的目的是根据 cgroup 的配额来计算它实际能从上层group中瓜分的额度。 以 min 为例&#xff1a; struct page_counter {/** Make sure usage does not share cacheline with any other field. The* memcg->memory.usage is a hot member of struct mem_cgroup.*/atomic_…

8.jib-maven-plugin构建springboot项目镜像,docker部署配置

目录 1.构建、推送镜像 1.1 执行脚本 2.2 pom.xml配置 ​2.部署镜像服务 2.1 执行脚本 2.2 compose文件 3.docker stack常用命令 介绍&#xff1a;使用goole jib插件构建镜像&#xff0c;docker stack启动部署服务&#xff1b; 通过执行两个脚本既可以实现构建镜像、部…

Scala---方法与函数

一、Scala方法的定义 有参方法&无参方法 def fun (a: Int , b: Int) : Unit {println(ab) } fun(1,1)def fun1 (a: Int , b: Int) ab println(fun1(1,2)) 注意点&#xff1a; 方法定义语法 用def来定义可以定义传入的参数&#xff0c;要指定传入参数的类型方法可以写返…

Stable Diffusion1.5网络结构-超详细原创

目录 1 Unet 1.1详细整体结构 1.2 缩小版整体结构 1.3 时间步编码 1.4 CrossAttnDownBlock2D 1.4.1 ResnetBlock2D 1.4.2 Transformer2DModel 1.4.2.1 BasicTransformerBlock 1.4.2.1.1 SelfAttention 1.4.2.1.2 CrossAttention 1.4.2.1.3 FeedForward 1.4.3 DownS…