線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2704
推到 Plurk!
推到 Facebook!

如何抓取一個月最天的天數

尚未結案
aamihcom
一般會員


發表:57
回覆:40
積分:19
註冊:2003-10-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-31 03:22:05 IP:210.202.xxx.xxx 未訂閱
請問各位大大,若要得知某月份最大的天數請問要如何去呼叫,比如說傳入(2003/02),則回傳28呢
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-31 08:41:13 IP:210.243.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-31 09:23:18 IP:210.201.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-31 09:28:22 IP:211.23.xxx.xxx 未訂閱
 
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-31 16:52:00 IP:203.69.xxx.xxx 未訂閱
例子 : 
{
  Word Year, Month, Day ;      DecodeDate(Date(), Year, Month, Day);      Day = MonthDays[IsLeapYear(Year)][Month-1] ;
}
MonthDays 這個陣列系統有宣告了,直接用就行了 ..
aamihcom
一般會員


發表:57
回覆:40
積分:19
註冊:2003-10-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-01-01 06:02:33 IP:210.202.xxx.xxx 未訂閱
謝謝各位大大對我的回答以下是我測試的結果一切都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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-01-01 08:07:58 IP:218.165.xxx.xxx 未訂閱
aamihcom您好  
引言:
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];
}
小修了一下您的程式碼,這就是為何會錯誤的原因 既然用了既有的>< 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大大提供這個函式,小弟也挖到寶了 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
willis
一般會員


發表:9
回覆:11
積分:4
註冊:2002-09-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-01-01 16:42:18 IP:61.59.xxx.xxx 未訂閱
寫一支付程式如下,這應該可以解決妳的問題 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-01-02 09:38:57 IP:211.23.xxx.xxx 未訂閱
引言: 謝謝各位大大對我的回答以下是我測試的結果一切都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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-01-02 16:33:19 IP:61.230.xxx.xxx 未訂閱
aamihcom你好: 請您將標題做個修正 因為最"天"的天數是什麼意思?新世代用語嗎?
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-01-04 21:25:44 IP:163.29.xxx.xxx 未訂閱
哈哈各位好我也來插個花:
  我給個另類思考方向,【問題】如何抓取一個月最大的天數 ,祇要(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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-01-05 08:40:30 IP:211.23.xxx.xxx 未訂閱
引言: aamihcom你好: 請您將標題做個修正 因為最"天"的天數是什麼意思?新世代用語嗎? 站長您好~那是最大的天數,一時打錯了~~ 另外請問一下,為什麼要將文章結案處不見了,我己登入會員但好像還是不行結案,以前可以,現在我找不到如何結案,請給一下指示~謝謝各位大大的幫忙解答~~
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-01-05 09:17:49 IP:61.230.xxx.xxx 未訂閱
引言:
引言: aamihcom你好: 請您將標題做個修正 因為最"天"的天數是什麼意思?新世代用語嗎?
站長您好~那是最大的天數,一時打錯了~~ 另外請問一下,為什麼要將文章結案處不見了,我己登入會員但好像還是不行結案,以前可以,現在我找不到如何結案,請給一下指示~謝謝各位大大的幫忙解答~~
站長是領航天使,我只是個來插花的路人,別弄錯嚕 你在第一則的發言按修正,就可以將文章標題做改正
chungho_chang
一般會員


發表:16
回覆:7
積分:4
註冊:2003-09-19

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-01-12 18:13:01 IP:61.59.xxx.xxx 未訂閱
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

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-01-13 11:41:03 IP:61.218.xxx.xxx 未訂閱
引言: 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 
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  ShowMessage("Days in February 2004 = " IntToStr(DaysInAMonth(2004, 2)));
}
//---------------------------------------------------------------------------        
/*生活是一種藝術,用心生活才能享受生活*/
發表人 - axsoft 於 2004/01/13 11:53:08
系統時間:2024-05-18 16:00:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!