蝉乐 发表于 2012-11-6 15:26:52

请求解释星期判断公示

虽然将程序写完了但是万年历中的星期判断公示一直不是很理解请高手来指教。
程序如下:
void week()
{
        if(y<3)
        {
                xq=(t+2*(y+12)+3*(y+13)/5+(n-1)+(n-1)/4-(n-1)/100+(n-1)/400)%7;
        }
        else
        {
                xq=(t+2*y+3*(y+1)/5+n+n/4-n/100+n/400)%7;
        }
}
希望大家多多指教,谢谢!!!!

devcang 发表于 2012-11-6 16:59:54

好像挺复杂,好像也有百度





如果要从年月日算星期几:(蔡乐公式)
公元元年1月1日是星期几?农历几月初几?2006年09月27日 星期三 21:36是星期一 农历十二月初一(农历和公历19年重复一次 所以查询19年的倍数 也就是1995年的1月1日就可以了解公元1年的农历日期:PS不一定准确)

最常见的公式:

W = + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D

Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。

最好用的是蔡勒公式:

W = - 2C + y + + + d - 1

C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和
14月来算,这时C和y均按上一年取值。

两个公式中的[...]均指只取计算结果的整数部分。算出来的W除以7,余数是几就
是星期几。如果余数是0,则为星期日。
---------------------------------------------------------------------------

蔡勒公式蔡勒(Zeller)公式:是一个计算星期的公式。
随便给一个日期,就能用这个公式推算出是星期几。
蔡勒公式如下:
W = - 2C + y + + + d - 1
或者是:w=y++-2c++d-1
公式中的符号含义如下:
w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
c:世纪-1(前两位数)
y:年(后两位数)
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)
d:日
[ ]代表取整,即只要整数部分。
下面以中华人民共和国成立100周年纪念日那天(2049年10月1日)来计算是星期几,过程如下:
w=y++-2c++d-1
=49++-2×20++1-1
=49++5-40+
=49+12+5-40+28
=54 (除以7余5)
即2049年10月1日(100周年国庆)是星期五。
再比如计算2006年4月4日,过程如下:
w=y++-2c++d-1
=6++-2*20++4-1
=-12 (除以7余2,                                       ((((((注意对负数的取模运算!)))))
不过,以上的公式都只适合于1582年(我国明朝万历十年)10月15日之后的情形。罗马教皇格里高利十三世在1582年组织了一批天文学家,根据哥白尼日心说计算出来的数据,对儒略历作了修改。将1582年10月5日到14日之间的10天宣布撤销,继10月4日之后为10月15日。
后来人们将这一新的历法称为“格里高利历”,也就是今天世界上所通用的历法,简称格里历或公历。
若要计算的日期是在1582年10月4日或之前,公式则为
w=y++-2c++d+3
1582.10.4之后的计算代码如下:
#include <iostream>
using namespace std;
int year,month,day;
cin >> year >> month >> day;
if ( month < 3 ) {
year -= 1;
month += 12;
}
char b = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int c = int(year / 100), y = year - 100 * c;
int w = int(c / 4) - 2*c +y +int(y/4) +(26 * (month + 1)/10 ) + day - 1;
注意w = ( w % 7 + 7 ) % 7;
cout << b << endl;

yklstudent 发表于 2012-11-6 18:29:13

想问下 时钟芯片不是已经做好这个了嘛 还需要自己算?

BXAK 发表于 2012-11-6 18:42:40

yklstudent 发表于 2012-11-6 18:29 static/image/common/back.gif
想问下 时钟芯片不是已经做好这个了嘛 还需要自己算?

这样更人性化啊,比如你调时间时,不用调星期几,星期会跟随你输入的年、月、日 自动变动

yklstudent 发表于 2012-11-6 19:47:07

BXAK 发表于 2012-11-6 18:42 static/image/common/back.gif
这样更人性化啊,比如你调时间时,不用调星期几,星期会跟随你输入的年、月、日 自动变动 ...

恩 了解了 谢谢解答了

蝉乐 发表于 2012-11-8 10:38:00

devcang 发表于 2012-11-6 16:59 static/image/common/back.gif
好像挺复杂,好像也有百度




非常感谢!{:smile:}

彼岸花开 发表于 2012-11-8 16:23:10

这个技术有很用哦。做个标记。自动跟新星期。

tonyone 发表于 2012-11-8 21:37:02

mark auto week

WangF 发表于 2012-11-9 00:13:11

2楼的解读太给力啦!

心飞扬 发表于 2012-11-9 17:36:33

顶楼主,标记。
页: [1]
查看完整版本: 请求解释星期判断公示