2016-05-21 1 views
0

私はこのコードを誕生日のリマインダーのために私のメインクラス(C#)に書きました。それは今まで働いていましたが、今はありません。私はコードをまったく変更していません。何が問題なの?私のC#プログラムで誕生日のリマインダが表示されないのはなぜですか?

/// <summary> 
/// Find all members that have birthdays occurring this week 
/// </summary> 
/// <returns>Returns an ArrayList containing members</returns> 
public ArrayList BirthdaysThisWeek() 
{ 
    ArrayList members = new ArrayList(); 

    DateTime today = DateTime.Today; 

    //Work out how many days to add or to take away to get us to Monday 
    int delta = DayOfWeek.Monday - today.DayOfWeek; 
    //Change the date to point to Monday 
    DateTime monday = today.AddDays(delta); 
    //Make this date point to Sunday 
    DateTime sunday = monday.AddDays(6); 

    foreach (Member member in allMembers) 
    { 
     DateTime dob = member.DateOfBirth.Date; 
     //Check to see if a member's birthdate is between Monday and Sunday 
     if(dob >= monday.Date && dob <= sunday.Date) 
     { 
      //Add member to members ArrayList 
      members.Add(member); 
     } 
    } 

    //Return all members that have a birthday this week if none were  found return an empty ArrayList 
    return members; 
} 
+1

このWinformsの/ WPFです:DAYOFYEARはうるう年では2月28日後に誕生日では動作しませんので、私は、CodeCasterの発言の後に私の答えを変更し、あなたがこのことによって、このようdobのDateTimeを初期化し解決することができますクライアント)またはASP.Net(サーバー)?後者の場合は、サーバーのdatetime設定に変更があります –

+0

どのように動作しませんか?それはいくつかの特定のメンバーを欠場ですか?特定の日ですか?それはまったく何かを返しますか? –

+3

曜日と月の部分だけでなく、年を含む日付も比較します。今年は誰も今週生まれていません – NineBerry

答えて

1

あなたの条件に動作しません週間。 (

int actuelYear = member.DateOfBirth.Month == monday.Month ? monday.Year : sunday.Year; 
DateTime dob = new DateTime(actuelYear, member.DateOfBirth.Month, member.DateOfBirth.Day); 
if (dob.Date >= monday.Date && dob.Date <= sunday.Date) 
{ 
    members.Add(member); 
} 
+0

編集してくれてありがとうございます.Jeremy :) –

+0

Abdellahさん、ありがとうございました。助けようと努力してくれた皆様に感謝します。 –

+0

私の喜びは、あなたの答えは実際に私よりも優れています。私は 'DayOfYear'メソッドを忘れていました。それを使用することは、この仕事にとって本当に雄弁です。 –

0

今週生まれない限り、私はこれがどのように機能するのか分かりません。

生まれた年を無視する必要があります。

public static bool IsBirthDayInRange(DateTime birthday, DateTime start, DateTime end) 
{ 
    DateTime temp = birthday.AddYears(start.Year - birthday.Year); 

    if (temp < start) temp = temp.AddYears(1); 

    return birthday <= end && temp >= start && temp <= end; 
} 

参考:https://stackoverflow.com/a/2554881/495455

ですから、このようにコードを変更する必要があります:あなたは、実際の日付を年、月、誕生日の日を比較するため

public ArrayList BirthdaysThisWeek() 
{ 
    ArrayList members = new ArrayList(); 

    DateTime today = DateTime.Today; 
    int delta = DayOfWeek.Monday - today.DayOfWeek; 
    DateTime monday = today.AddDays(delta); 
    DateTime sunday = monday.AddDays(6); 

    foreach (Member member in allMembers) 
    { 
     DateTime dob = member.DateOfBirth.Date; 

     //Check to see if a member's birthdate is between Monday and Sunday 
     if (IsBirthDayInRange(dob, monday, sunday) 
     { 
      //Add member to members ArrayList 
      members.Add(member); 
     } 
    } 
    return members; 
} 
+0

この問題を解決するには、コードをどのように書き直すべきですか?私は全く新しいです。 –

+0

'IsBirthDayInRange'メソッドは良いです、そのオブジェクト指向プログラミングは、再利用可能な、カプセル化された、抽象的な、多態的なものを使っています。たとえば、毎月、二ヶ月、四半期などの誕生日を知りたい場合は、すべてのアプリケーションでその仕事を行います。 –

+0

ご不明な点や[ようやく]ようこそ! –

関連する問題