C# 获得给定两个日期的季度号

C# 获得给定两个日期的季度号,c#,sql-server,C#,Sql Server,我有下一张带日期季度的清单: DateTime date = DateTime.Parse('2017-02-01'); int quarterNumber = ((date.Month - 1) / 3) + 1; 1月1日至3月1日 4月2日至6月 7月3日至9月 10月4日至12月 用户可以选择其中任何一个,这将设置为第一季度。接下来,他提供一年一个月,我必须计算给定日期的季度数。因为我不介意天数,所以它总是设置为1。因此,例如,如果用户选择第三季度,输入2017年和02月(2017

我有下一张带日期季度的清单:

DateTime date = DateTime.Parse('2017-02-01');
int quarterNumber = ((date.Month - 1) / 3) + 1;
  • 1月1日至3月1日
  • 4月2日至6月
  • 7月3日至9月
  • 10月4日至12月
用户可以选择其中任何一个,这将设置为第一季度。接下来,他提供一年一个月,我必须计算给定日期的季度数。因为我不介意天数,所以它总是设置为1。因此,例如,如果用户选择第三季度,输入2017年和02月(2017-02-01),结果必须是3,因为7月至9月变为数字1,因此1月至3月变为数字3

到目前为止,我可以计算静态季度的季度数:

DateTime date = DateTime.Parse('2017-02-01');
int quarterNumber = ((date.Month - 1) / 3) + 1;
无论哪一个设置为第一个季度,我如何修改它以获得正确的季度

DateTime date = DateTime.Parse("2017-02-01");
int quarterNumber = ((12+(date.Month - 1)-((x-1)*3)) %12 / 3) + 1;

其中x是从列表(1,2,3,4)中选择的四分之一编号

非常感谢,这正是我所需要的,并且非常有效。你能不能给我一些简短的解释,说明这是如何工作的,或者解决这类数学运算的模式是什么。我感谢你的帮助,伙计!!很抱歉,您的回复太晚,因为您的要求是将所选季度作为第一个季度,所以您应该从日期中删除该月的金额。((1-1)*3))=第一季度删除0个月((2-1)*3))=第二季度删除3个月,依此类推。加上12+以确保减去后的月数始终保持您需要的月数,例如,如果日期为第2个月,季度为3(平均第6个月),则减去后的月数将为2-6=-4,但如果加上12+则为12+2-4=10,这就像计算下一年的同一季度,然后%12以消除第二年的影响