How to convert number of days to years,months and days
本问题已经有最佳答案,请猛点这里访问。
如果我有两个约会,那么我会在像这样的日子里得到它们之间的区别。
如何在以下视图中详细说明:
将天数转换为(
没有现成的解决方案。问题是数据不是"固定的",例如并非所有年份都是365天(闰年为366天),并且并非每个月都可以假定为标准的30天。
在没有上下文的情况下计算这种信息是非常困难的。但是,您有一个以天为单位的持续时间,以准确计算您需要确切知道这些天何时到来的年/月数,即在哪个月和哪个年——这将允许您确定月份和/或年份中的确切日期。
根据您的意见和以下条件
- 1年=365天
- 1个月=30天
那么下面的代码就可以完成这项工作了
1 2 3 4 5 6 7 | DateTime startDate = new DateTime(2010, 1, 1); DateTime endDate = new DateTime(2013, 1, 10); var totalDays = (endDate - startDate).TotalDays; var totalYears = Math.Truncate(totalDays / 365); var totalMonths = Math.Truncate((totalDays % 365) / 30); var remainingDays = Math.Truncate((totalDays % 365) % 30); Console.WriteLine("Estimated duration is {0} year(s), {1} month(s) and {2} day(s)", totalYears, totalMonths, remainingDays); |
正如前面的答案中提到的,很难从几天内解决这个问题。闰年和月份天数存在问题。如果以最初的两个日期开始,则可以使用类似于以下内容的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | DateTime date1 = new DateTime(2010, 1, 18); DateTime date2 = new DateTime(2013, 2, 22); int oldMonth = date2.Month; while (oldMonth == date2.Month) { date1 = date1.AddDays(-1); date2 = date2.AddDays(-1); } int years = 0, months = 0, days = 0, hours = 0, minutes = 0, seconds = 0, milliseconds = 0; // getting number of years while (date2.CompareTo(date1) >= 0) { years++; date2 = date2.AddYears(-1); } date2 = date2.AddYears(1); years--; // getting number of months and days oldMonth = date2.Month; while (date2.CompareTo(date1) >= 0) { days++; date2 = date2.AddDays(-1); if ((date2.CompareTo(date1) >= 0) && (oldMonth != date2.Month)) { months++; days = 0; oldMonth = date2.Month; } } date2 = date2.AddDays(1); days--; TimeSpan difference = date2.Subtract(date1); Console.WriteLine("Difference:" + years.ToString() +" year(s)" + "," + months.ToString() +" month(s)" + "," + days.ToString() +" day(s)"); |
号
输出为:
你不能,因为这取决于开始日期即30天可以是1个月1天,或1个月2天,或少于1个月或如果是闰年,365天不到一年