所以我正在研究这个具有日期功能的小应用程序(显示日,月,年等的差异) 现在做“选定的日期是14151天,465个月和39年前”这样的事情很容易,但我怎么能以可读的格式(“15天,7个月和39年前”)说出来? / p>
现在要做到这一点,我已经设定了多年的差异,如
int years = selectedDate.Year - currentDate.Year
几个月和几天相同。然而,这几乎没有用,特别是当前进一个月时(因为它可能会说15天和1个月因为date1.Day - date2.Day = 15,而实际上可能是8天。我认为这是因为日期的工作方式与几个月的东西,但我不确定。
无论如何,我希望我有任何意义,因为我甚至无法真正跟踪自己。 任何想法都非常感谢。 :d
答案 0 :(得分:5)
从另一个中减去一个DateTime
会返回一个TimeSpan
,您可以使用该TimeSpan result = selectedDate - currentDate;
result.Days...
result.Hours...
etc.
来确定两个日期之间的时间段,表示为天,小时,分钟,秒等的时间测量值。
DateTime
花费数月和数年是比较棘手的,因为一个月中的日子每年都不同等等。您必须手动进行数学运算,可能是原始的{{1}}个对象。
答案 1 :(得分:2)
短时间内你可以这样做:
TimeSpan timeDiff = selectedDate - currentDate;
string readableDiff = string.Format(
"{0:D2} hrs, {1:D2} mins, {2:D2} secs",
timeDiff.Hours, timeDiff.Minutes, timeDiff.Seconds);
但是我注意到你正在处理涉及数年和数月的更长时期。对于这样的计算,您需要比TimeSpan更强大的功能。您可以查看Jon Skeet的.NET平台的Noda Time端口: https://code.google.com/p/noda-time/
使用Noda Time,你可以这样做:
var period = Period.Between(selectedDate, currentDate,
PeriodUnits.Years | PeriodUnits.Months | PeriodUnits.Days);
string readableDifference = string.Format(
"{0} years, {1} months and {2} days",
period.Years, period.Months, period.Days);
答案 2 :(得分:0)
您可以使用DateTime
课程进行数学运算。结果是TimeSpan
的行为类似于DateTime,只表示一段时间而不是绝对日期。
DateTime selectedDate;
DateTime currentDate;
TimeSpan difference = selectedDate.Subtract(currentDate);
string result = difference.ToString("whatever format you like");
答案 3 :(得分:0)
使用TimeSpan
和Math.Abs
来说明负值:
DateTime date1 = new DateTime(2012, 5, 15);
DateTime date2 = new DateTime(2014, 5, 16);
TimeSpan dateDiff = date1 - date2;
int years = Math.Abs((int)dateDiff.TotalDays) / 365;
答案 4 :(得分:0)
我这样做是为了获得两个月之间的差异:
var start = startDate.Value;
var end = endDate.Value;
var duration = ((end.Year - start.Year) * 12) + end.Month - start.Month;
当然,我得到的唯一原因.Value是因为它们是可以约会的日期,但我想你可以在你的情况下使用类似的东西。
答案 5 :(得分:0)
如果您获取两个DateTime对象之间的差异,则会得到一个TimeSpan对象。
DateTime a = DateTime.Now;
DateTime b = DateTime.Now.AddYears(-1);
TimeSpan c = a - b;
Console.WriteLine( c );
会得到364.23:59:59.9951930
的答案。您可以为格式化的响应重载toString(),或者根据需要获得c.TotalMilliseconds
并除以/ modulos以获得多少年/月/等...