Advance Member
|
重點是萬年曆的運算, 英文版Wiki有說如何運算
http://en.wikipedia.org/wiki/Julian_day#Calculation
以下C99 code是小弟網路上找的, 利用以上演算, 不仰賴外部library. code只有3行, 若要壓到1行也是可以的, 但compiler會抱怨, 且最後轉出的assembler不會比較優.
代碼:
#include <stdio.h>
const char *wd(int year, int month, int day) {
static const char *weekdayname[] = {"Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
size_t JND = \
day \
+ ((153 * (month + 12 * ((14 - month) / 12) - 3) + 2) / 5) \
+ (365 * (year + 4800 - ((14 - month) / 12))) \
+ ((year + 4800 - ((14 - month) / 12)) / 4) \
- ((year + 4800 - ((14 - month) / 12)) / 100) \
+ ((year + 4800 - ((14 - month) / 12)) / 400) \
- 32045;
return weekdayname[JND % 7];
}
找出第一個週二再稍微寫一些code即可
|