这段代码是去年5月花了2天写的,主要是日历、星期的算法试验 。今天碰巧翻出来看到了,若不是随意一翻,真都差点忘掉。
忘掉可不好,可能哪天用上,还是在此做个记录免得忘掉。
记得前面写了篇日历算法相关的文章( 一个日历核心算法的实现),没写完,那个就是根据这个来写的。做这个实际上是为了写JavaScript日历实现,先贴代码,等过段时间有空了,再回头补充这两篇文章。
/**
* 日历,星期 算法试验
* @version 2009-05-06 ~ 07 yhl.lxrm@gmail.com
*/
#include <stdio.h>
#include <stdlib.h>
/**
* 构造日子数据结构
*/
struct DayNode{
int isEmpty;
int day;
int week;
int safeType;
};
typedef struct DayNode SafeDayNode;
/**
* 日期存放结构
*/
struct dateNode{
int year;
int month;
int day;
};
typedef struct dateNode DateNode;
// 给定年月获取当月天数
int getMDay(int y, int m)
{
int mday[12]= {31,28,31,30,31,30,31,31,30,31,30,31} ;
if (( 0 == y % 4 && 0 != y % 100) || 0 == y % 400)
mday[1] = 29;
return mday[m-1];
}
// 获取星期数,0对应星期天 ,1对应星期一,其他类推
int week(int y, int m, int d)
{
int wk ,date_offset=d,im,tmp=0;
if (m < = 12 && m >=1 )
{
for(im=1; im < m; ++im)
{
date_offset += getMDay(y,im);
}
}
//printf("日期偏移量 C = %d \n",date_offset);
/*根据日期计算星期的公式*/
wk = (y-1 + (y - 1)/ 4 - (y - 1) / 100 + (y - 1) / 400 + date_offset ) % 7;
//printf("星期 %d :\n",wk);
return wk;
}
以上是需要用到的功能函数,下面给出日历核心算法的具体实现:
Continue reading