跟大师学习系统编程---linux时间换算

本文通过分析Linus Torvalds的一段代码,探讨如何将墙上时间转换为自1970年1月1日以来的秒数。程序使用C语言编写,涉及时间转换、闰年处理和查找表法。主要亮点在于通过数组month表示月份秒数,避免了复杂的switch语句,提高了代码可读性。
摘要由CSDN通过智能技术生成

本文选取linus torwards 写的一段小程序,将当前的墙上时间换算成自1970年1月1日起的秒数,来学习一般的C语言程序编写的注意事项。

问题

墙上时间 ( 年 月 日 时 分 秒 )涉及元素较多,不利于计算机进行时间计算,在操作系统内部,一般在启机时,先读出墙上时间,转换成从1970年1月1日起的秒数,保存在内存中。随着时间的流逝,此秒数依次增加。当我们再次需要墙上时间时,从秒数再换算回来。

本程序将墙上时间转换成1970年1月1日凌晨0时0分0秒起到现在的秒数。

代码注解和点评

#include<time.h>

定义了tm结构体,还有其他一些与时间相关的信息

#define MINUTE 60
#define HOUR (60 * MINUTE)
#define DAY (24 * HOUR)
#define YEAR (365 * DAY)

分别代表了1分钟的秒数,1小时的秒数,1天的秒数,1年的秒数。这些宏常量定义消除了可能的魔鬼数字,增加了代码的可读性。值得学习和借鉴。

另一方面,YEAR没有考虑到闰年,实际上闰年有366天,而不是365天。但常量定义必须是要有固定的值,所以这里也没有那么死板。后面程序中会考虑闰年的情况(先假定所有年都不是闰年,然后再加上闰年的情况)。

/* interestingly, we assume leap-years */
static int month[12] = {
    0,
    DAY*(31),
    DAY*(31+29),
    DAY*(31+29+31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值