我有一个人生日的DateTime对象。我使用人的年,月和出生日创建此对象,方法如下:
DateTime date = new DateTime(year, month, day);
我想知道在这个人下一个生日之前剩下多少天。在C#中这样做的最佳方式是什么(我是语言新手)?
答案 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++;
}
刚刚为一个程序做这个。如果您只需要剩下几天的整数,那么与其他方法相比,这很简单。