Writing out how many years and months are in a date range (i.e. 2 years and 3 months)
如果是2016年2月1日至2019年1月31日:我想输出:"3年",因为日期范围是3年。
如果是2016年2月1日至2019年3月31日:我想输出:"3年2个月",因为日期范围是3年2个月。
我不需要担心白天,所以如果这是正常的话,我可以把时间凑到一起。
外面有没有帮手能帮我做这种事?
- 这是您需要的-stackoverflow.com/a/4127396/4383585
- 问题是一年和一个月不是时间单位。
- @虽然这是真的,但我认为一个简单的"月/12+余数"足够强大,可以在用户界面中显示(这似乎是其目标)。
- @罗布,但是你几个月来过得怎么样?每30天?我不是说不可能得到,只是大多数解决方案都会有边缘案例,而这些案例并不总是像你认为的那样有效。
- @Juharr是的,你说得对-我忘了没有TimeSpan.TotalMonths-在这种情况下,我同意,很难提供一个强大的解决方案
你可以使用它,它并不真正关心闰年:
1 2 3 4 5
| DateTime first = new DateTime (2016, 2, 1);
DateTime second = new DateTime (2019, 3, 31);
double totalMonths = (second - first ).TotalDays / (365.25 / 12);
int years = (int)totalMonths / 12;
int months = (int)Math .Round(totalMonths - (years * 12), 0); |
- 那么,你是说如果日期范围包括闰年,结果会不准确吗?如果闰年,我就不能用366代替365.25吗?
- 大多数人都不担心闰年,因为它很少会影响我正在尝试创建的描述吗?
对于大约计算年和月,可以执行以下操作:
1 2 3 4 5 6
| DateTime dayStart;
DateTime dateEnd;
TimeSpan ts = dateEnt - dateStart
int years = ts.Days / 365;
int months = (ts.Days % 365) / 31; |
对于精确的计算,考虑闰年、不同月份的天数等可能很难。