開頭
當電腦或者電子設備只要輸入日期與時間即會自動產生星期幾,基本上這是透過基本公式來產生,因此您並不需要自己設定星期。承襲上一篇衛星時間取得方法,可是衛星時間除了需進行UTC區域時間補償,同時星期也必須自行計算才能得到。
以下使用公式邏輯區分為a、b、m、d 四項
日曆上的西元1600年3月1號以後的每一天都表示為西元(100a+b)年m月d日
(1) d就是日曆上的"日"數
(2) m有特殊規定
3月~12月 m流水號為 1~10; 1月=11; 2月=12
(3) a、b定義
1 or 2月則為 100a+b=西元年數 -1
3 ~12月則為 100a+b=西元年數
公式:
d+[2.6m-0.2] - 2a+b+[a/4]+[b/4]
[x]為高斯符號, ex: [3]=3; [2.4]=2
回傳值: 0-6:星期日, 星期一.... 星期六 以此類推,當值為負數ex:-3, 正確為7-3=4 為星期四
程式撰寫
- 編譯器:CCS PCWHD
- 單晶片:Microchip PIC18F45K22
unsigned int8 RTC_Weekend_Transfer(unsigned int8 year_l, unsigned int8 month, unsigned int8 m_day, unsigned int8 year_h=20)
{
unsigned int8 m=0, a=0, b=0;
a = year_h;
b = year_l;
if (month>=1 && month<=2)
{
m = month+10;
if (b==0) {a--; b=99;}
else b--;
}else m = month - 2;
int w = m_day + (int)(2.6*m-0.2) - 2*a+b + (int)(a/4) + (int)(b/4);
div_t idiv;
idiv = div(w, 7);
w = (idiv.rem+7)%7; //當餘數為負值時透過此程序可以轉正
return w;
}
沒有留言:
張貼留言
留言板