【问题标题】:Why my C# program doesn't display Birthday reminders? [closed]为什么我的 C# 程序不显示生日提醒? [关闭]
【发布时间】:2016-05-22 01:13:11
【问题描述】:

我已将此代码写入我的主类 (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;
}

【问题讨论】:

  • 这是 Winforms/WPF(客户端)还是 ASP.Net(服务器)?如果是后者,则可能是更改服务器上的日期时间设置
  • 在什么方面不起作用?它会错过一些特定的成员吗?具体日子?它会返回任何东西吗?
  • 您比较包括年份在内的日期,而不仅仅是日期和月份部分。今年本周没有成员出生
  • 它正在使用 ASP.Net(服务器)。
  • 在运行程序和设置成员生日时不返回任何内容,例如明天等

标签: c# asp.net


【解决方案1】:

您的情况不适用,因为您将生日的年份、月份和日期与实际一周的日期进行比较。在 CodeCaster 的评论之后我改变了我的答案,因为 DayOfYear 不适用于闰年 2 月 28 日之后的生日,你可以通过像这样初始化 dobDateTime 来解决这个问题:

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);
}

【讨论】:

  • 感谢杰里米的编辑 :)
  • 非常感谢 Abdellah,它正在工作!感谢其他所有人也试图提供帮助。
  • 很高兴,您的回答实际上比我的要好。我忘记了DayOfYear 方法。使用它来完成这项任务真的很有说服力。
  • 我很高兴听到这个消息!
  • @CodeCaster 你是对的,谢谢你的重要评论,我已经改变了答案来解决这个问题。再次感谢你:)
【解决方案2】:

除非他们本周出生,否则我看不出这会如何。

你需要忽略他们出生的年份。

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;
}

【讨论】:

  • 我应该如何重写代码来解决这个问题?我对此完全陌生。
  • IsBirthDayInRange 方法很好,它的面向对象编程使用类似的东西作为它的可重用、封装、抽象和多态。例如,如果您想知道每个月、双月、季度等的生日 - 它适用于所有应用程序。
  • 如果您有任何疑问,请告诉我,欢迎来到Stack Overflow
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 2014-06-18
  • 2021-07-30
  • 1970-01-01
相关资源
最近更新 更多