-4

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

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

谢谢纳特

4

2 回答 2

3

尝试:

float year = 1.5;

int days = Math.Round(year * 365);
于 2013-02-13T17:29:22.463 回答
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);
}
于 2017-07-29T13:47:22.557 回答