计算生日剩余的天数?

时间:2009-07-23 07:44:16

标签: c# datetime

我有一个人生日的DateTime对象。我使用人的年,月和出生日创建此对象,方法如下:

DateTime date = new DateTime(year, month, day);

我想知道在这个人下一个生日之前剩下多少天。在C#中这样做的最佳方式是什么(我是语言新手)?

6 个答案:

答案 0 :(得分:25)

// birthday is a DateTime containing the birthday

DateTime today = DateTime.Today;
DateTime next = new DateTime(today.Year,birthday.Month,birthday.Day);

if (next < today)
    next = next.AddYears(1);

int numDays = (next - today).Days;

如果生日是2月29日,这个简单的算法就会失败。这是另一种选择(与Seb Nilsson的答案基本相同:

DateTime today = DateTime.Today;
DateTime next = birthday.AddYears(today.Year - birthday.Year);

if (next < today)
    next = next.AddYears(1);

int numDays = (next - today).Days;

答案 1 :(得分:5)

使用今天的年份和生日的月份和日期不适用于闰年

经过一些测试后,我就开始工作了:

private static int GetDaysUntilBirthday(DateTime birthday) {
    var nextBirthday = birthday.AddYears(DateTime.Today.Year - birthday.Year);
    if(nextBirthday < DateTime.Today) {
        nextBirthday = nextBirthday.AddYears(1);
    }
    return (nextBirthday - DateTime.Today).Days;
}

在闰年和2月29日的同一天进行了测试。

答案 2 :(得分:1)

这是基于Philippe Leybaert在上面的回答,但处理了一个额外的边缘案例,我在之前的任何答案中都没有看到这个案例。

我正在处理的边缘情况是生日是闰日,生日是当年的过去,当前年份不是闰年,但是明年< /强>

当前提供的答案将减少一天,因为它将“下一个”设置为当前年份的2月28日,然后增加一年,使2月28日为闰年(这是不正确的)。更改一行会处理此边缘情况。

DateTime today = DateTime.Today;
DateTime next = birthday.AddYears(today.Year - birthday.Year);

if (next < today)
{
    if (!DateTime.IsLeapYear(next.Year + 1))
        next = next.AddYears(1);
    else
        next = new DateTime(next.Year + 1, birthday.Month, birthday.Day);
}

int numDays = (next - today).Days;

更新:根据Philippe的编辑指出我的代码有一个相当大的缺陷。

答案 3 :(得分:0)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime dt1 = DateTime.Parse("09/08/2012");
            DateTime dt2 = DateTime.Parse(DateTime.Now.ToString());
            int days = (dt2 - dt1).Days;
            Console.WriteLine(days);

            double month = (dt2 - dt1).Days / 30;
            Console.WriteLine(month);
            double year = (dt2 - dt1).Days / 365;
            Console.WriteLine(year);
            Console.Read();
        }
    }
}

答案 4 :(得分:-1)

试试这个方法

private int GetDaysBeforeBirthday(DateTime birthdate)
{
    DateTime nextBday = new DateTime(DateTime.Now.Year, birthdate.Month, birthdate.Day);
    if (DateTime.Today > nextBday)
        nextBday = nextBday.AddYears(1);
    return (nextBday - DateTime.Today).Days;
}

只要通过您的生日,它将返回您下一个生日前的剩余天数

答案 5 :(得分:-1)

        DateTime Variable = DateTime.Now;
        int NumOfDaysTillNextMonth = 0;
        while (Variable < Comparer) //Comparer is just a target datetime
        {
            Variable = Variable.AddDays(1);
            NumOfDaysTillNextMonth++;
        }

刚刚为一个程序做这个。如果您只需要剩下几天的整数,那么与其他方法相比,这很简单。