minix中时间转换的实现(asctime.c)
在minix2.0源代码中,有相当经典的时间转换函数实现(src\ src\ lib\ ansi\ asctime.c),今天我们就来分析一下asctime.c中的源码
首先引入几个相关的头文件:
1、time.h 主要的结构体与相关定义:
struct tm {
int tm_sec; /* 分钟后面的秒[0, 59] */
int tm_min; /* 小时后面的分钟[0, 59] */
int tm_hour; /* 距离凌晨00:00点的小时数[0, 23] */
int tm_mday; /* 月中的某一天[1, 31] */
int tm_mon; /* 某一个月份[0, 11] */
int tm_year; /* 与1900相隔的年数 */
int tm_wday; /* 离星期日的天数 [0, 6] */
int tm_yday; /* 从一月开始的天数 [0, 365] */
int tm_isdst; /* Daylight Saving Time flag */
};
char *asctime(const struct tm *_timeptr)
2、loc_time.h
#define YEAR0 1900 /*第一年*/
#define EPOCH_YR 1970 /* EPOCH = Jan 1 1970 00:00:00 */
#define SECS_DAY (24L * 60L * 60L)
#define LEAPYEAR(year) (!((year) % 4) && (((year) % 100) || !((year) % 400)))
#define YEARSIZE(year) (LEAPYEAR(year) ? 366 : 365)
#define FIRSTSUNDAY(timp) (((timp)->tm_yday - (timp)->tm_wday + 420) % 7)
#define FIRSTDAYOF(timp) (((timp)->tm_wday - (timp)->tm_yday + 420) % 7)
#define TIME_MAX ULONG_MAX
#define ABB_LEN 3 extern const int _ytab[][];
extern const char *_days[];
extern const char *_months[]; void _tzset(void);
unsigned _dstget(struct tm *timep); extern long _timezone;
extern long _dst_off;
extern int _daylight;
extern char *_tzname[];
3、asctime.c
#include <string.h>
#include <time.h>
#include "loc_time.h" #define DATE_STR "??? ??? ?? ??:??:?? ????\n" //时间格式 static char * two_digits(register char *pb, int i, int nospace)
{
//将两位数字转化为字符形式并存储在pb所指向的地址空间中
*pb = (i / ) % + '';
if (!nospace && *pb == '') *pb = ' ';
pb++;
*pb++ = (i % ) + '';
return ++pb;
} static char * four_digits(register char *pb, int i)
{
//将四位数字转化为字符形式并存储在pb所指向的地址空间中
i %= ;
*pb++ = (i / ) + '';
i %= ;
*pb++ = (i / ) + '';
i %= ;
*pb++ = (i / ) + '';
*pb++ = (i % ) + '';
return ++pb;
} char *asctime(const struct tm *timeptr) //把timeptr指向的tm结构体中储存的时间转换为字符串格式返回。
{ // 格式为:Www Mmm dd hh:mm:ss yyyy。
//其中Www为星期;Mmm为月份;dd为日;hh为时;mm为分;ss为秒;yyyy为年份。
static char buf[];
register char *pb = buf;
register const char *ps;
register int n; strcpy(pb, DATE_STR); //对buf进行标准格式初始化: pb-> ??? ??? ?? ??:??:?? ????\n
ps = _days[timeptr->tm_wday]; //extern const char *_days[];
n = ABB_LEN; //#define ABB_LEN 3
while(--n >= ) *pb++ = *ps++;
pb++;
ps = _months[timeptr->tm_mon];
n = ABB_LEN;
while(--n >= ) *pb++ = *ps++;
pb++;
pb = two_digits(
two_digits(
two_digits(two_digits(pb, timeptr->tm_mday, )
, timeptr->tm_hour, )
, timeptr->tm_min, )
, timeptr->tm_sec, ); four_digits(pb, timeptr->tm_year + );
return buf;
}
minix中时间转换的实现(asctime.c)的更多相关文章
- ie浏览器中时间转换
var begintime = $("#start").val(); var lastLoginTimeStart =new Date(begintime).getTime();/ ...
- vue中插值表达式中时间转换yyyy-MM-dd HH:mm:ss
vue插值表达式中将时间转换两种方式:一.定义方法 <div id="app">当前实时时间:{{dateFormat(date)}}</div> //时间 ...
- php中时间转换函数
date("Y-m-d H:i",$unixtime) 1.php中获得今天零点的时间戳 要获得零点的unix时间戳,可以使用 $todaytime=strtotime(“tod ...
- C++中时间转换
所需头文件 #include <chrono> #include <time.h> auto now = std::chrono::system_clock::now(); s ...
- python中时间格式
问题:通过MySQLdb查询datetime字段,然后通过浏览器显示出来,得到的格式是: 'Thu, 19 Feb 2009 16:00:07 GMT' (http呈现出来的格式) ...
- js中的时间转换—毫秒转换成日期时间
转自:http://www.javascript100.com/?p=181 前几天,在项目中遇到js时间增加问题,要将js毫秒时间转换成日期时间 var oldTime = (new Date(&q ...
- sql点滴42—mysql中的时间转换
原文:sql点滴42-mysql中的时间转换 UNIX时间戳转换为日期用函数: FROM_UNIXTIME() select FROM_UNIXTIME(1156219870); 日期转换为UNIX时 ...
- JAVA中时间格式(SimpleDateFormat)和数字格式(DecimalFormat)转换详解(转)
时间格式转换SimpleDateFormat: //定义日期的格式 SimpleDateFormat format =new SimpleDateFormat("yyMMdd"); ...
- python中时间的转换和使用datetime
模块 一个完整大型的python程序是由模块和包的形式组织起来的,可见模块在python中的重要性.模块是一种组织型式,它许多有关联(关系)的代码组织放到单独的独立文件中.简单的说,可以把模块理解为一 ...
随机推荐
- 使用 resizableImageWithCapInsets 方法实现可伸缩图片
之前介绍过通过 stretchableImageWithLeftCapWidth:topCapHeight: 方法来实现可伸缩图片: 可看这篇随笔:使用 stretchableImageWithLef ...
- js准确获取当前页面url网址信息
这篇文章主要为大家介绍了js准确获取当前页面url网址信息的多种方法,包括正则法.split拆分法等,需要的朋友可以参考下 在WEB开发中,时常会用到javascript来获取当前页面的url网址 ...
- SSM是什么框架?
SSM框架,是Spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统. 1.Spring简介 ...
- BarTender条码检验位类型知识讲解
检验位类型指定BarTender使用哪一种算法来计算符号的附加检验位.使用“BarTender检验位类型”选项可以从您的符号所支持的检验位类型中选择一种检验位类型.下面,小编就给大家分享设置检验位类型 ...
- Phpcms V9单页添加自定义字段
说起文章自定义自段,大家都会想到 wordpress 的自定义字段,确实 wordpress 系统很强大,字段可以很灵活的在后台进行添加与更新,并能够很好的在前台进行调用,对于这点 phpcms v9 ...
- Tomcat------如何配置域名和80端口
1.打开Tomcat的默认安装路径下的Service.xml文件 路径:C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\Serv ...
- 九度 1254:N皇后问题
Leetcode 原题. 这里 N 最大会取到 13, TLE 了 代码 #include <iostream> #include <stdio.h> using namesp ...
- jquery easyui datagrid 无滚动条,datagrid 没垂直滚动条
jquery easyui datagrid 无滚动条,datagrid 没垂直滚动条 ============================== 蕃薯耀 2018年2月6日 http://www. ...
- Discuz!X 3.4 任意文件删除漏洞复现过程(附python脚本)
今天看下群里在讨论Discuz!X 3.4 任意文件删除漏洞,自己做了一些测试,记录一下过程.结尾附上自己编写的python脚本,自动化实现任意文件删除. 具体漏洞,请查看 https://paper ...
- iOS开发-为UITableViewCell添加横线
在开发过程中经常会遇到设计稿中Cell分割线样式和系统自带的样式差别很大,如何实现这里做下总结,主要包括如下两步: 1. 取消TableView默认的分割线样式 _tableView.separato ...