DateTime difference in Years, Months and Days in C#
本问题已经有最佳答案,请猛点这里访问。
假设我有两个日期时间对象,一个表示今天的日期,另一个表示用户提供的出生日期。
我想在两个日期之间做一个简单的计算差异,并以以下格式输出一个字符串:
17年-2个月-18天
数字就是例子。我怎样才能在C中实现这一点?
编辑:
是的,我尝试过各种组合,但我只能这样得到年份差异:
1 2 3 4 5 6 7 8 | DateTime userDate = SuppliedDate; int userAge = DateTime.Now.Year - userDate.Year; DateTime today = DateTime.Now; if (userDate > today.AddYears(-userAge)) { userAge--; } Age.Text = userAge.ToString() +" years"; |
谢谢您。
这是一个比看上去更棘手的问题;年份的天数(闰年)和月份(28、29、30或31)都是可变的。因此,为了获得您想要的输出,您必须在出生日期和当前日期之间的每年和每月进行检查,检查闰年状态、每个月的天数,并随着时间的推移不断增加。
如其他答案所指出的,第一步是使用
1 2 3 | var dob = new DateTime(1962,5,20); var age = DateTime.Today.Subtract(dob.Date); // May as well use midnight's var totalDays = age.TotalDays; |
从这里开始,您需要从出生年份(本例中是1962年)开始计算年份,直到当前年份。每过一年,从总数中减去365天(如果是闰年,则减去366天)。
当您在当前日期的一年内到达时,开始计算月份,然后再次从剩余的总天数中减去正确的数字。
当您在当前日期的一个月内到达时,剩下的部分就是字符串的最后一部分。
当我有机会的时候,我会使用上面的伪代码的一个有效版本,但是我希望这会给你一个指向正确方向的指针。
只需将时间跨度转换回日期时间:
1 2 3 4 | var test = DateTime.Now; var test2 = DateTime.Now; var result = test - test2; DateTime resultDate = DateTime.MinValue + result; |
如果您需要此套房,请尝试:
1 |
您必须更正所有值(年、月、日)都太多。
当你从C中的另一个减去一个
时间跨度并不是用来给你几个月或几年的,即使有一个自定义的格式字符串。
这意味着您必须根据可用的属性手动计算年和月,最大的属性是天,但精度要低得多。
你可以使用这样的东西:
1 2 3 | var userDate = new DateTime(1980, 5, 3); var dateDif = DateTime.Now.Subtract(userDate); string output = dateDif.ToString("yy Years - MM Months - dd Days"); |