我有一张表格显示1年到10年的时间。我想计算天数(一年大约365天,不需要包括闰年)。如果只是几年,很容易计算天数(比如2年= 2 * 365天)。但如何将1。5年或1。75年转换成几天?
如果用分数年来指定年份,那么计算天数的有效方法是什么。
由于 纳特
答案 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);
}