How can I subtract one date from another?
本问题已经有最佳答案,请猛点这里访问。
假设我有两个约会:
日期:现在:
第二个日期是文件创建日期:
1 | #7/10/2011 9:57:58 PM# |
我想做点类似的事情:
这是我的代码:
1 | Dim ddd As TimeSpan = Date.Now - SecondDate |
TimeSpan中没有"Year"属性。(年份属性应该是
更新:
谢谢大家,但我创造了一个功能:
2希望它能帮助别人。
C代码:
2您不能获得"年"或"月",因为并非所有的年或月都具有相同的日计数。
替代方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | var now = DateTime.Now; var totalYears = now.Year - secondDate.Year; if (secondDate.Month > now.Month || (secondDate.Month == now.Month && secondDate.Day > now.Day)) { totalYears--; } var months = now.Month - secondDate.Mont; if (secondDate.Day > now.Day) { months--; } if (months < 0) { months = 12 + months; } |
可以使用datetime.parse("date as a string")将两者转换为datetime对象。然后您将要使用日期时间。减去http://msdn.microsoft.com/en-us/library/8ysw4sby.aspx然后,您将得到您想要的时间跨度,您可以在这里浏览:http://msdn.microsoft.com/en-us/library/system.timespan_methods.aspxtotaldays属性可以除以365得到年份(请注意下面的公平挑战)。几个月的计算将更加复杂。
问题是,对一年没有真正的共同定义。在日历中,一年有365或366天。在银行业,一年有360天等。
根据你的代码,我会说你想要日历年的不同,所以你不能从一个时间跨度(因为时间跨度不知道一年是365天还是366天)。
所以你可以做的是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var years = DateTime.Now.Year - fileDate.Year; var dayInCurrentYear = fileDate.AddYears(years); //if the day is later in the year than today's day go back one year if(dayInCurrentYear > DateTime.Now) { years--; dayInCurrentYear = dayInCurrentYear.AddYears(-1); } var span = DateTime.Now - dayInCurrentYear; Console.WriteLine("File was created {0} years and {1} days ago", years, span.TotalDays); |
由于
1 2 3 4 5 6 | Dim zeroTime As New DateTime(1, 1, 1) Dim a = #8/10/2013 10:53:46 PM# Dim b = #7/10/2011 9:57:58 PM# Dim span As TimeSpan = a - b Dim years As Integer = (zeroTime + span).Year - 1 |
你也可以看看乔恩·斯基特的《野田时代》,它支持这个观点。
1 |
或者,在JonSkeet的noda时间库中有一个函数。