kernel/mktime
/*
* linux/kernel/mktime.c
*
* Copyright (C) 1991, 1992 Linus Torvalds
*/
#include <linux/mktime.h>
/*
* This isn't the library routine, it is only used in the kernel.
* as such, we don't care about years<1970 etc, but assume everything
* is ok. Similarly, TZ etc is happily ignored. We just do everything
* as easily as possible. Let's find something public for the library
* routines (although I think minix times is public).
*/
/*
* PS. I hate whoever though up the year 1970 - couldn't they have gotten
* a leap-year instead? I also hate Gregorius, pope or no. I'm grumpy.
*/
#define MINUTE 60 //1分钟60秒
#define HOUR (60*MINUTE) //一小时 60 * MINUTE秒
#define DAY (24*HOUR) //一天有多少秒
#define YEAR (365*DAY) //一年有多少秒
/* interestingly, we assume leap-years */
//假设为闰年,计算每个月过去秒数
static int month[12] = {
0, //进入新的一年过去的秒数
DAY*(31), //一月过去之后占用的秒数
DAY*(31+29), //二月过去之后占用的秒数
DAY*(31+29+31), //三月过去之后占用的秒数
DAY*(31+29+31+30), //四月过去之后占用的秒数
DAY*(31+29+31+30+31), //五月过去之后占用的秒数
DAY*(31+29+31+30+31+30), //六月过去之后占用的秒数
DAY*(31+29+31+30+31+30+31), //七月过去之后占用的秒数
DAY*(31+29+31+30+31+30+31+31), //八月过去之后占用的秒数
DAY*(31+29+31+30+31+30+31+31+30), //九月过去之后占用的秒数
DAY*(31+29+31+30+31+30+31+31+30+31), //十月过去之后占用的秒数
DAY*(31+29+31+30+31+30+31+31+30+31+30) //十一月过去之后占用的秒数(12月过去要计算整年)
};
//初始化内核时间
long kernel_mktime(struct mktime * time)
{
long res;
int year;
year = time->year - 70; //从1970年一月0点0分0秒
/* magic offsets (y+1) needed to get leapyears right.*/
res = YEAR*year + DAY*((year+1)/4); //从计时时间开始到今年共有多少秒
res += month[time->mon]; //加上已经过去的月份的秒数(假设为闰年)
/* and (y+2) here. If it wasn't a leap-year, we have to adjust */
if (time->mon>1 && ((year+2)%4)) //判断是否为闰年,并且是否过了二月,进行时间调整
res -= DAY;
res += DAY*(time->day-1); //加上这个月过去的天数所占有的秒数
res += HOUR*time->hour; //加上过去的小时数占有的秒数
res += MINUTE*time->min; //加上过去的分钟数占有的秒数
res += time->sec; //加上过去的秒数
return res; //结果为计时开始到现在为止过去的秒数
}
kernel/mktime的更多相关文章
- Linux0.11内核剖析--内核代码(kernel)--sched.c
1.概述 linux/kernel/目录下共包括 10 个 C 语言文件和 2 个汇编语言文件以及一个 kernel 下编译文件的管理配置文件 Makefile.其中三个子目录中代码注释的将放在后面的 ...
- 《linux 内核全然剖析》 mktime.c
tm结构体的定义在time.h里面 struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_y ...
- kernel/Makefile
## Makefile for the linux kernel.## Note! Dependencies are done automagically by 'make dep', which a ...
- Linux 内核概述 - Linux Kernel
Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...
- 04.ubuntu下kvm 命令行安装64位ubuntu报"Couldn't find hvm kernel for Ubuntu tree."的问题
1.安装ubuntu时使用的virt-install的配置: virt-install \ --name test4 \ --ram 1024 \ --disk path=/data/01_ubunt ...
- 在 kernel 下打 log。 怪異現象與解決方式。
code battery_log(BAT_LOG_CRTI, "y t: %d \n", (int)my_timer_timeout); battery_log(BAT_LOG_C ...
- 机器学习——支持向量机(SVM)之核函数(kernel)
对于线性不可分的数据集,可以利用核函数(kernel)将数据转换成易于分类器理解的形式. 如下图,如果在x轴和y轴构成的坐标系中插入直线进行分类的话, 不能得到理想的结果,或许我们可以对圆中的数据进行 ...
- User space 与 Kernel space
学习 Linux 时,经常可以看到两个词:User space(用户空间)和 Kernel space(内核空间). 简单说,Kernel space 是 Linux 内核的运行空间,User spa ...
- kernel 4.4.12 外部模块Makefile 脚本编写
kernel 4.4.12 最简单module的编译 上一篇博客上面有一个最简单的模块源代码,今天就上一个Makefile,运行make 就可以编译一个外部的模块. vim Makefile 这个是我 ...
随机推荐
- java day2一个模拟双色球的代码
package day2; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt ...
- $scope 的生命周期
当Angular关心的事件发生在浏览器中时,比如用户在通过ng-model属性监控的输入字段中输入,或者带有ng-click属性的按钮被点击时,Angular的事件循环都会启动.这个事件将在Angul ...
- linux中的内存申请函数的区别 kmalloc, vmalloc
kmalloc是返回连续内存的内存分配函数 vmalloc是返回较大内存空间的,不需要连续的内存分配函数.其速度较慢,并且不能在中断上下文调用.
- Ubuntu下用wireshark抓取802.11封包并进行过滤分析
要用wireshark抓802.11的包 需要在linux下进行. 要在linux下抓802.11的包 需要在linux下安装无线网卡驱动. 所以 在正式抓取之前先把这两样东西搞起来. *没有特殊说明 ...
- Percona Server 5.6.33-79.0 发布
Percona Server 5.6.33-79.0 发布了,该版本基于 MySQL 5.6.33,包含了所有的 bug 修复,是Percona Server 5.6 系列中的正式版本.该版本主要是修 ...
- NVelocity用法(转)
每个人应该知道的NVelocity用法 NVelocity是一个基于.NET的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来 ...
- ios开发之网络php
接着前面的学习,几天上午学习了数据库网络值php用户的注册与登录,感觉代码与ios上的oc太相似了,因此学习下来没什么障碍了,下面是代码: 首先是javascript.html文件中: <!DO ...
- HTML DOM对象之createElement()方法
今天在学习DOM节点操作时,发现了创建DOM节点的createElement()方法的一个有意思的现象. 代码如下: var box=document.getElementById("box ...
- 4 多表代替密码之Hill 密码 2实现
该解密方法的KEY 不是一个数或者一段字符串,而是一个矩阵, 比如有个3*3的KEY: 那么如果我们要加密一个长度为N的字符串, 那么把N除以3,分成M个3个字母组成的小段, 对每个小段尽心加密: 1 ...
- MVC之路随记3--Html辅助方法
概述:MVC中使用@Html.MethodName 来做很多Html的事情,简化了开发工程量,使用方便,并且易于理解 详细方法: 1.表单 <form action="/Home/Se ...