?? time.c
字號:
/*========================================================================
*
* 版權所有 (C) 2000-2001 吳柏建. All Rights Reserved.
*
* 文件: time.c
* 內容: PSDE_DEMO_PDA處理時間的函數。
* 作者: 吳柏建。
* 制作日期: 2000.8.6-2001.8.6
* 修改日期: 2001..
*
*========================================================================*/
#include "pda.h"
#define TIME_MIN_YEAR 1900
#define TIME_MAX_YEAR 2099
/*PDA的系統全局時間*/
PDATIME SysTime;
/*PDA的用戶處理秒事件的全局函數指針*/
void (*FuncSecond)(void)=NULL;
/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---得到每月的最大天數-------
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
int GetMonthMaxDay(int year,int month)
{
switch(month)
{
case 4:
case 6:
case 9:
case 11:return 30;
case 2:if((year%4!=0)||(year%100==0&&year%400!=0))return 28;else return 29;
default:return 31;
}
}
/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---得到某一天的星期數-------
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
int GetWeek(int year,int month,int day)
{
long i;
i=1461*(long)(month<=2?year-1:year)/4+153*(long)(month<=2?month+13:month+1)/5+day;
return (int)((i-621049)%7);
}
/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---時間增加一小時-------
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
void TimeHourAdd(PDATIME *pTime)
{
if(++pTime->hour>23)
{
pTime->hour=0;
if(++pTime->day>GetMonthMaxDay(pTime->year,pTime->month))
{
pTime->day=1;
if( ++pTime->month>12 )
{
pTime->month=1;
if(++pTime->year>TIME_MAX_YEAR)pTime->year=TIME_MAX_YEAR;
}
}
}
}
/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---時間減少一小時-------
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
void TimeHourDec(PDATIME *pTime)
{
if(--pTime->hour<0)
{
pTime->hour=23;
if(--pTime->day<=0)
{
if( --pTime->month<0 )
{
pTime->month=12;
if(--pTime->year<TIME_MIN_YEAR)pTime->year=TIME_MIN_YEAR;
}
pTime->day=GetMonthMaxDay(pTime->year,pTime->month);
}
}
}
/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---時間處理小時改變-------
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
void TimeHourChange(int hour,PDATIME *pTime)
{
if(hour>0){while(hour--)TimeHourAdd(pTime);}
else if(hour<0)while(hour++)TimeHourDec(pTime);
}
/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---處理time結構增加一分鐘的函數-------
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
void TimeMinuteAdd(PDATIME *pTime)
{
static int i;
if(++pTime->minute>59)
{
pTime->minute=0;
if(++pTime->hour>23)
{
pTime->hour=0;
switch(pTime->month)
{
case 4:
case 6:
case 9:
case 11:i=30;break;
case 2:if((pTime->year%4!=0)||(pTime->year%100==0&&pTime->year%400!=0))i=28;else i=29;break;
default:i=31;break;
}
if(++pTime->day>i)
{
pTime->day=1;
if( ++pTime->month>12 )
{
pTime->month=1;
if(++pTime->year>TIME_MAX_YEAR)pTime->year=TIME_MAX_YEAR;
}
}
}
}
}
/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---處理time結構增加一秒的函數-------
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
void TimeSecondAdd(PDATIME *pTime)
{
if(++pTime->second>59 )
{
pTime->second=0;
TimeMinuteAdd(pTime);
}
}
const unsigned char MCTG[]="庚辛壬癸甲乙丙丁戊己";
const unsigned char MCDZ[]="子丑寅卯辰巳午未申酉戌亥";
const unsigned char MCSX[]="鼠牛虎免龍蛇馬羊猴雞狗豬";
const unsigned char SolartermStr[24][6]=/*農歷節氣*/
{"小 寒","大 寒","立 春","雨 水","驚 蟄","春 分","清 明","谷 雨","立 夏",
"小 滿","芒 種","夏 至","小 暑","大 暑","立 秋","處 暑","白 露","秋 分",
"寒 露","霜 降","立 冬","小 雪","大 雪","冬 至",};
const unsigned char MCMonthStr[12][8]=
{" 正 月"," 二 月"," 三 月"," 四 月"," 五 月"," 六 月"," 七 月"," 八 月"," 九 月"," 十 月","十一月","十二月",};
const unsigned char MCDayStr[30][6]=
{"初 一","初 二","初 三","初 四","初 五","初 六","初 七","初 八","初 九","初 十",
"十 一","十 二","十 三","十 四","十 五","十 六","十 七","十 八","十 九","二 十",
"廿 一","廿 二","廿 三","廿 四","廿 五","廿 六","廿 七","廿 八","廿 九","三 十",};
const unsigned char MCNewyear[]=/*農歷新年的陽歷時間對照表(1950~2049)*/
{129,217,206,127,214,203,124,212,131,218,208,128,215,205,125,213,202,
121,209,130,217,206,127,215,203,123,211,131,218,207,128,216,205,125,
213,202,220,209,129,217,206,127,215,204,123,210,131,219,207,128,216,
205,124,212,201,122,209,129,218,207,126,214,203,123,210,131,219,208,
128,216,205,125,212,201,122,210,129,217,206,126,213,203,123,211,131,
219,208,128,215,204,124,212,201,122,210,130,217,206,126,214,202,123,
211,201,219,208,128,215,204,124,212,202,};
const unsigned char MCTable[]=/*農歷時間表(1950~2049)*/
{197,45,5,54,90,173,197,170,5,178,61,165,205,74,13,74,154,149,10,151,
101,86,138,181,10,213,70,210,142,165,14,165,54,74,140,151,122,155,
197,90,5,106,91,105,199,82,11,82,75,37,198,75,10,75,212,171,2,173,
101,109,139,105,13,169,77,146,205,37,45,37,218,77,10,86,98,182,133,
181,6,213,94,169,206,146,14,146,61,38,138,86,10,87,212,214,3,90,86,
213,198,201,7,73,70,147,197,43,5,43,42,91,197,90,117,106,203,85,11,
164,91,73,202,147,10,149,69,45,138,173,26,181,213,170,5,210,109,165,
205,74,13,74,76,149,197,46,5,86,42,181,197,178,102,210,142,165,103,
37,86,75,140,151,12,171,53,90,138,214,59,105,215,82,11,82,107,37,
202,75,10,75,84,171,133,91,5,173,43,106,203,82,125,146,205,37,13,
37,90,85,196,173,4,182,53,181,141,170,14,201,222,146,14,146,109,38,
138,86,10,87,68,214,134,213,7,85,7,73,};
const unsigned char SolartermStore[]=/*農歷節氣庫(1950~2049)*/
{
/*1950*/ 6,20,4,19,6,21,5,20,6,21,6,22,8,23,8,24,8,23,9,24,8,23,8,22,
/*1951*/ 6,21,4,19,6,21,5,21,6,22,6,22,8,24,8,24,8,24,9,24,8,23,8,23,
/*1952*/ 6,21,5,20,5,21,5,20,5,21,6,21,7,23,7,23,8,23,8,23,7,22,7,22,
/*1953*/ 5,20,4,19,6,21,5,20,6,21,6,22,7,23,8,23,8,23,8,24,8,22,7,22,
/*1954*/ 6,20,4,19,6,21,5,20,6,21,6,22,8,23,8,24,8,23,9,24,8,23,7,22,
/*1955*/ 6,21,4,19,6,21,5,21,6,22,6,22,8,23,8,24,8,24,9,24,8,23,8,22,
/*1956*/ 6,21,5,20,5,20,5,20,5,21,6,21,7,23,7,23,8,23,8,23,7,22,7,22,
/*1957*/ 5,20,4,19,6,21,5,20,6,21,6,22,7,23,8,23,8,23,8,24,8,22,7,22,
/*1958*/ 6,20,4,19,6,21,5,20,6,21,6,22,7,23,8,23,8,23,9,24,8,23,7,22,
/*1959*/ 6,21,4,19,6,21,5,21,6,22,6,22,8,23,8,24,8,24,9,24,8,23,8,22,
/*1960*/ 6,21,5,19,5,20,5,20,5,21,6,21,7,23,7,23,7,23,8,23,7,22,7,22,
/*1961*/ 5,20,4,19,6,21,5,20,6,21,6,21,7,23,8,23,8,23,8,23,7,22,7,22,
/*1962*/ 6,20,4,19,6,21,5,20,6,21,6,22,7,23,8,23,8,23,9,24,8,23,7,22,
/*1963*/ 6,21,4,19,6,21,5,21,6,22,6,22,8,23,8,24,8,24,9,24,8,23,8,22,
/*1964*/ 6,21,5,19,5,20,5,20,5,21,6,21,7,23,7,23,7,23,8,23,7,22,7,22,
/*1965*/ 5,20,4,19,6,21,5,20,6,21,6,21,7,23,8,23,8,23,8,23,7,22,7,22,
/*1966*/ 6,20,4,19,6,21,5,20,6,21,6,22,7,23,8,23,8,23,9,24,8,23,7,22,
/*1967*/ 6,21,4,19,6,21,5,21,6,22,6,22,8,23,8,24,8,24,9,24,8,23,8,22,
/*1968*/ 6,21,5,19,5,20,5,20,5,21,5,21,7,23,7,23,7,23,8,23,7,22,7,22,
/*1969*/ 5,20,4,19,6,21,5,20,6,21,6,21,7,23,8,23,8,23,8,23,7,22,7,22,
/*1970*/ 6,20,4,19,6,21,5,20,6,21,6,22,7,23,8,23,8,23,9,24,8,23,7,22,
/*1971*/ 6,21,4,19,6,21,5,21,6,22,6,22,8,23,8,24,8,24,9,24,8,23,8,22,
/*1972*/ 6,21,5,19,5,20,5,20,5,21,5,21,7,23,7,23,7,23,8,23,7,22,7,22,
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -