如何将分数年(比如1。25年)转换为天数

时间:2013-02-13 17:25:32

标签: c#-3.0

我有一张表格显示1年到10年的时间。我想计算天数(一年大约365天,不需要包括闰年)。如果只是几年,很容易计算天数(比如2年= 2 * 365天)。但如何将1。5年或1。75年转换成几天?

如果用分数年来指定年份,那么计算天数的有效方法是什么。

由于 纳特

2 个答案:

答案 0 :(得分:3)

尝试:

float year = 1.5;

int days = Math.Round(year * 365);

答案 1 :(得分:1)

由于最初的问题是微不足道的,我将回答一个更有趣的问题,即闰年和其他日期/时间奇怪的问题。由于一年中的确切天数取决于所涉及的年份,因此唯一明智的方法是相对于给定日期计算它。第一步是AddYears重载,接受double值:

public static DateTime AddYears(this DateTime dateTime, double years)
{
    int roundedYears = (int) Math.Floor(years);
    var roundedDate = dateTime.AddYears(roundedYears);
    var lastYearSpan = roundedDate.AddYears(1) - roundedDate;
    return roundedDate.AddDays((years % 1) * lastYearSpan.TotalDays);
}

现在您可以获得对您有意义的天数,例如:

var now = DateTime.UtcNow;
Console.WriteLine((now.AddYears(1.25) - now).TotalDays); 

样本测试:

public void TestAddYearsDouble()
{
    var date = new DateTime(2000, 1, 15); //middle of the month to keep things simple
    Assert.AreEqual(date.Year + 1, date.AddYears(1.0).Year);
    Assert.AreEqual(date.Month, date.AddYears(1.0).Month);
    Assert.AreEqual(date.Year, date.AddYears(0.0833).Year);
    Assert.AreEqual(date.Month + 1, date.AddYears(0.0833).Month);
    Assert.AreEqual(date.Year + 8, date.AddYears(8.5).Year);
    Assert.AreEqual(date.Month + 6, date.AddYears(8.5).Month);
}