Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 写出日期范围内的年和月数(即2年和3个月)_C#_Datetime_Datetime Format - Fatal编程技术网

C# 写出日期范围内的年和月数(即2年和3个月)

C# 写出日期范围内的年和月数(即2年和3个月),c#,datetime,datetime-format,C#,Datetime,Datetime Format,在2016年2月1日-2019年1月31日的情况下: 我想输出:“3年”,因为日期范围是3年 在2016年2月1日-2019年3月31日的情况下: 我想输出:“3年2个月”,因为日期范围是3年2个月 我不需要担心日子,所以如果这是正常的话,我就可以把时间集中起来 有没有任何c#助手可以帮我做类似的事情?对于大约计算年和月的时间,您可以执行以下操作: DateTime dayStart; DateTime dateEnd; TimeSpan ts = dateEnt - dateStart in

在2016年2月1日-2019年1月31日的情况下:
我想输出:“3年”,因为日期范围是3年

在2016年2月1日-2019年3月31日的情况下:
我想输出:“3年2个月”,因为日期范围是3年2个月

我不需要担心日子,所以如果这是正常的话,我就可以把时间集中起来


有没有任何c#助手可以帮我做类似的事情?

对于大约计算年和月的时间,您可以执行以下操作:

DateTime dayStart;
DateTime dateEnd;

TimeSpan ts = dateEnt - dateStart
int years = ts.Days / 365;
int months = (ts.Days % 365) / 31;

对于精确的计算,考虑闰年、不同的月天数等因素可能会很棘手。

对于大约计算年和月,您可以执行以下操作:

DateTime dayStart;
DateTime dateEnd;

TimeSpan ts = dateEnt - dateStart
int years = ts.Days / 365;
int months = (ts.Days % 365) / 31;

对于精确的计算,考虑到闰年、不同的月天数等因素,这可能会很棘手。

您可以使用这一点,它并不真正关心闰年:

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);

你可以使用这一点,它并不真正关心闰年:

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);

这就是你需要的——问题是一年和一个月不是固定的时间单位。@juharr虽然这是真的,但我认为一个天真的“月/12+余数”足够强大,可以在UI中显示(这似乎是本文的目标)@Rob,但是你是如何得到月的呢?30天?我并不是说不可能得到它,只是大多数解决方案都会有边缘案例,这些案例并不总是像你认为的那样有效。@juharr是的,你是对的-我忘记了没有
TimeSpan.TotalMonths
-在这种情况下我同意,提供一个健壮的解决方案确实很困难这就是你需要的-问题是一年和一个月不是固定的时间单位。@juharr虽然这是真的,但我认为一个天真的“月/12+余数”足够健壮,可以在UI中显示(这似乎是本文的目标)@Rob,但是你是如何得到月的呢?30天?我并不是说不可能得到它,只是大多数解决方案都会有边缘案例,这些案例并不总是像你认为的那样有效。@juharr是的,你是对的-我忘记了没有
TimeSpan.TotalMonths
-在这种情况下我同意,提供一个可靠的解决方案确实很困难。你是说,如果日期范围包括闰年,那么结果会不准确吗?如果是闰年,我就不能用366替换365.25吗?不要担心闰年,因为它很少会影响我试图创建的描述。那么你是说如果日期范围包括闰年,那么结果会不准确吗?如果是闰年,我不能用366替换365.25吗?不要担心闰年,因为它很少会影响我试图创建的描述?