关于日期之类的算法
来源:互联网 发布:oracle12c建立数据库 编辑:程序博客网 时间:2024/05/02 04:58
/*------------------------------------------------------------------------------
----------
2000年~2099年星期算法
--------------------------------------------------------------------------------
---------*/
unsigned char WeekDay20(unsigned char y, unsigned char m, unsigned char d)
{
unsigned char week, day;
day = WeekTab[m - 1];//月表
week = day >> 5;//月星期数
day &= 0x1f;//月天数
if ((m < 3) && (y & 0x03)){//平年
if (m == 2) day--;//平年月天数
week++;//平年月表+1
}
y = y + (y >> 2);//年+年/4
week = (week + y + d + 2) % 7;//(星期=年+年/4+月表+2日)%7
return (week << 5) | day;//返回星期和月天数
}
/*------------------------------------------------------------------------------
----------
0000年~9999年星期算法
--------------------------------------------------------------------------------
---------*/
unsigned char WeekDay(unsigned char c, unsigned char y, unsigned char m,
unsigned char d)
{
unsigned char week, day;
c &= 0x03;//百年%4
c = c | (c << 2);//百年%4*5
day = WeekTab[m - 1];//月表
week = day >> 5;//月星期数
day &= 0x1f;//月天数
if ((m < 3) && !((c == 0) | (y & ((y & 0x03) == 0)))){//平年
if (m == 2) day--;//平年月天数
week++;//平年月表+1
}
y = y + (y >> 2);//年+年/4
week = (week + c + y + d + 2) % 7;//(星期=百年%4*5+年+年/4+月表+日+2)%7
return (week << 5) | day;//返回星期和月天数
}
unsigned char BcdToBin(unsigned char val)
{
val = (val >> 4) * 10 + (val & 0x0f);//将BCD码转换为10进制数
return val;//返回10进制数
}
void main(void)
{
unsigned char c, y, m, d;
unsigned char cx, yx, mx, dx;
unsigned char WDay, Week, Day;
/*---------------------------------------------------------
0001年1月1日 星期天
---------------------------------------------------------*/
c = 0x00;
y = 0x01;
m = 0x01;
d = 0x01;
cx = BcdToBin(c);//百年
yx = BcdToBin(y);//年
mx = BcdToBin(m);//月
dx = BcdToBin(d);//日
WDay = WeekDay(cx, yx, mx, dx);//取星期和月天数
Week = WDay >> 5;//得到星期
Day = WDay & 0x1f;//得到最大月天数
/*---------------------------------------------------------
1918年1月21日 星期一
---------------------------------------------------------*/
c = 0x19;
y = 0x18;
m = 0x01;
d = 0x21;
cx = BcdToBin(c);//百年
yx = BcdToBin(y);//年
mx = BcdToBin(m);//月
dx = BcdToBin(d);//日
WDay = WeekDay(cx, yx, mx, dx);//取星期和月天数
Week = WDay >> 5;//得到星期
Day = WDay & 0x1f;//得到最大月天数
/*---------------------------------------------------------
9999年12月31日 星期天
---------------------------------------------------------*/
c = 0x00;
y = 0x01;
m = 0x01;
d = 0x01;
cx = BcdToBin(c);//百年
yx = BcdToBin(y);//年
mx = BcdToBin(m);//月
dx = BcdToBin(d);//日
WDay = WeekDay(cx, yx, mx, dx);//取星期和月天数
Week = WDay >> 5;//得到星期
Day = WDay & 0x1f;//得到最大月天数
/*---------------------------------------------------------
2004年6月18日 星期五
---------------------------------------------------------*/
c = 0x20;
y = 0x04;
m = 0x06;
d = 0x18;
cx = BcdToBin(c);//百年
yx = BcdToBin(y);//年
mx = BcdToBin(m);//月
dx = BcdToBin(d);//日
WDay = WeekDay20(yx, mx, dx);//取星期和月天数
Week = WDay >> 5;//得到星期
Day = WDay & 0x1f;//得到最大月天数
/*---------------------------------------------------------
2018年3月8日 星期四
---------------------------------------------------------*/
c = 0x20;
y = 0x18;
m = 0x03;
d = 0x08;
cx = BcdToBin(c);//百年
yx = BcdToBin(y);//年
mx = BcdToBin(m);//月
dx = BcdToBin(d);//日
WDay = WeekDay20(yx, mx, dx);//取星期和月天数
Week = WDay >> 5;//得到星期
Day = WDay & 0x1f;//得到最大月天数
while(1);
}
- 关于日期之类的算法
- 关于日期的常用算法
- 关于日期的常用算法
- 关于日期的常用算法
- 关于日期的常用算法
- 关于日期的常用算法
- 关于面试跳槽之类的
- 关于网卡和路由之类的
- 关于android性能优化之类的文章
- Java编程中关于日期的常用算法
- 关于GeoprocessingTask之类
- 学习算法之类
- 关于面试、简历之类的某人聊天的观点
- [转]关于面试、简历之类的某人聊天的观点
- 关于FM1208之类的CPU卡的总结说明
- 关于FM1208之类的CPU卡的总结说明
- java 关于-2>>3之类的移位问题
- 语言基础(关于字符串相关的getchar、getline之类)
- Drupal Views教程
- SqlMapClient对象
- 美女开发者独立开发二十多款应用,月入上万
- 用Java实现按字节长度截取中英文数字字符串的方法总结
- Android Intent用法汇总
- 关于日期之类的算法
- 下一步的工作计划
- 如何实现对UITextField ,UITextView等输入框的 字数限制
- Android权限汇总
- 通过JNI实现Java和C++的相互调用
- java中String的透彻理解
- CorePlot开源框架
- NSNotificationCenter的作用
- java基本语法