如何抓取一個月最天的天數 |
尚未結案
|
aamihcom
一般會員 發表:57 回覆:40 積分:19 註冊:2003-10-02 發送簡訊給我 |
|
ENIX007
高階會員 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
aamihcom您好
我想最簡單的方法就是宣告一個陣列吧
int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31}
呼叫2月份:
int days;
days = month[1];//陣列從0開始
如果需要年份,也就是考慮到閏月的話,可以參考流大大分享的記事本+萬年曆程式
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41803
就可以囉 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~ |
GaryKao99
中階會員 發表:46 回覆:102 積分:54 註冊:2002-08-23 發送簡訊給我 |
IsLeapYear
-----------------------------------------------------------------
Indicates whether a specified year is a leap year. Unit Sysutils Category date/time routines extern PACKAGE bool __fastcall IsLeapYear(Word Year); Description Call IsLeapYear to determine whether the year specified by the Year parameter is a leap year. Year specifies the calendar year. Use DecodeDate to obtain the value of Year for IsLeapYear from a TDateTime object. Example:
bool IsThisLeapYear() { Word Yr, Mnth, Day; DecodeDate(Date(), Yr, Mnth, Day); return IsLeapYear(Yr); }定義一個陣列如 ENIX007 所設定 int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31}再加上 閏年判斷 若是閏年...則二月為29天, 其他月份天數不變 ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會 |
GaryKao99
中階會員 發表:46 回覆:102 積分:54 註冊:2002-08-23 發送簡訊給我 |
int getYearMonthDays(int year, int nonth) { int MonthDays[2][12] = {31,28,31,30,31,30,31,31,30,31,30,31} , {31,29,31,30,31,30,31,31,30,31,30,31} return MonthDays[IsLeapYear(year)][month-1]; }~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會 |
yehcwin
一般會員 發表:1 回覆:10 積分:2 註冊:2002-06-11 發送簡訊給我 |
|
aamihcom
一般會員 發表:57 回覆:40 積分:19 註冊:2003-10-02 發送簡訊給我 |
謝謝各位大大對我的回答以下是我測試的結果一切都ok了,只是有一個疑問
就是宣告陣列的地方我不拿掉會有錯誤,拿掉之後測試了幾個資料也都正確,請問一定要宣告那個陣列嗎,若沒宣告有差嗎 int __fastcall TFormMenu::getYearMonthDays(int year, int month)
{ //ShowMessage(String(getYearMonthDays(2003, 2)));
//回傳指定年月之天數
Word Year, Month, Day ;
DecodeDate(Date(), Year, Month, Day);
// int MonthDays[2][12] = {31,28,31,30,31,30,31,31,30,31,30,31},
// {31,29,31,30,31,30,31,31,30,31,30,31}; return MonthDays[IsLeapYear(year)][month-1];
}
|
ENIX007
高階會員 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
aamihcom您好
引言:小修了一下您的程式碼,這就是為何會錯誤的原因 既然用了既有的>< face="Verdana, Arial, Helvetica">引言: Day = MonthDays[IsLeapYear(Year)][Month-1] ; 請注意全部都是區域變數,所得是指今天(系統時間)月份天數,比如今天是 1月1日,得到Day = 31,如果您是要自己傳入year,month的話,根本不需要 DecodeDate(Date(), Year, Month, Day); 最後函式傳回year,month所得的值,根本沒用到Year與Month,總的來說, 您的函式只需要return那行就夠囉< > 這是提醒您的地方< > PS.感謝GaryKao99與yehcwin大大提供這個函式,小弟也挖到寶了 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~int __fastcall TFormMenu::getYearMonthDays(int year, int month) { //ShowMessage(String(getYearMonthDays(2003, 2))); //回傳指定年月之天數 Word Year, Month, Day ; DecodeDate(Date(), Year, Month, Day);//<---這行並不需要 // int MonthDays[2][12] = {{31,28,31,30,31,30,31,31,30,31,30,31}, // {31,29,31,30,31,30,31,31,30,31,30,31}};//<---少了一個大括號 return MonthDays[IsLeapYear(year)][month-1]; }
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~ |
willis
一般會員 發表:9 回覆:11 積分:4 註冊:2002-09-12 發送簡訊給我 |
寫一支付程式如下,這應該可以解決妳的問題 int __fastcall TForm1::Get_Day(int year,int month)
{
int day;
switch(month)
{
case 1: case 3: case 5: case 7: case 8:
day=31;
break;
case 4: case 6: case 9: case 11 :
day=30;
break;
case 2:
if( ( (year%4)==0 && (year0)!=0 ) || ( (year0)==0 && (year@0)==0 ) ) //是否為潤月判斷
day=29;
else
day=28; break; }
return day;
}
|
GaryKao99
中階會員 發表:46 回覆:102 積分:54 註冊:2002-08-23 發送簡訊給我 |
引言: 謝謝各位大大對我的回答以下是我測試的結果一切都ok了,只是有一個疑問 就是宣告陣列的地方我不拿掉會有錯誤,拿掉之後測試了幾個資料也都正確,請問一定要宣告那個陣列嗎,若沒宣告有差嗎 int __fastcall TFormMenu::getYearMonthDays(int year, int month) { //ShowMessage(String(getYearMonthDays(2003, 2))); //回傳指定年月之天數 Word Year, Month, Day ; DecodeDate(Date(), Year, Month, Day); // int MonthDays[2][12] = {31,28,31,30,31,30,31,31,30,31,30,31}, // {31,29,31,30,31,30,31,31,30,31,30,31}; return MonthDays[IsLeapYear(year)][month-1]; }抱歉抱歉 由於 int getYearMonthDays(int year, int nonth) { int MonthDays[2][12] = {31,28,31,30,31,30,31,31,30,31,30,31} , {31,29,31,30,31,30,31,31,30,31,30,31} return MonthDays[IsLeapYear(year)][month-1]; }紅色部分的宣告和系統有宣告的名稱相同造成錯誤 如yehcwin大大所說MonthDays系統已經宣告了..自然就不必多此一舉 所以程式只須如此 int getYearMonthDays(int year, int nonth) { return MonthDays[IsLeapYear(year)][month-1]; }~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會 |
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
|
g6101
高階會員 發表:22 回覆:129 積分:110 註冊:2002-06-15 發送簡訊給我 |
哈哈各位好我也來插個花: 我給個另類思考方向,【問題】如何抓取一個月最大的天數 ,祇要(if)判斷所傳入月份,再做適當的加減,設定日期為恆(01)一,傳入TDateTime元件減法一天,那答案不就(月份的最後一天)出來了,程式碼如下: int __fastcall TForm1::Get_Day(int year,int month) { AnsiString dtstr; TDateTime dt; if (month == 12) { year ++; month =1; } else { month ++; } dtstr.sprintf("%d/d/01",year,month); dt = StrToDate(dtstr); dt.operator --(); return StrToInt(dt.FormatString("dd")); } |
aamihcom
一般會員 發表:57 回覆:40 積分:19 註冊:2003-10-02 發送簡訊給我 |
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
|
chungho_chang
一般會員 發表:16 回覆:7 積分:4 註冊:2003-09-19 發送簡訊給我 |
DaysInAMonth(const Word AYear, const Word AMonth)一個月中有幾天 Call DaysInAMonth to obtain the number of days in the specified month of the specified year.
AYear is a year between 1 and 9999 (inclusive).
AMonth is a month between 1 and 12 (inclusive). DaysInAMonth(Year,Month)
如DaysInAMonth(2003,2),如果為28 不知道是不是你要的?
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: DaysInAMonth(const Word AYear, const Word AMonth)一個月中有幾天 Call DaysInAMonth to obtain the number of days in the specified month of the specified year. AYear is a year between 1 and 9999 (inclusive). AMonth is a month between 1 and 12 (inclusive). DaysInAMonth(Year,Month) 如DaysInAMonth(2003,2),如果為28 不知道是不是你要的?C Builder 5並無此Function,C Builder 6有這個Function 使用時記得 #include /*生活是一種藝術,用心生活才能享受生活*/發表人 - axsoft 於 2004/01/13 11:53:08 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |