如何获得两个日期之间的季度数字。在 2 和 1 之间 -> 2341
Posted
技术标签:
【中文标题】如何获得两个日期之间的季度数字。在 2 和 1 之间 -> 2341【英文标题】:How to get quarter numbers between 2 Dates. Between 2 and 1 -> 2341 【发布时间】:2019-04-09 14:14:12 【问题描述】:我在堆栈上搜索了一下,我只找到了两个日期之间的季度数。
但我正在寻找两个日期之间的季度列表。
所以首先我们得到每个日期的季度数。
我们通过下一条规则得到它们:
季度 - 一月、二月、三月。
季度 - 4 月、5 月、6 月,
季度 - 七月、八月、九月,
季度 - 10 月、11 月、12 月。
对于每个日期,我们得到季度数。这部分我可以自己解决。第二部分是获取其中两个之间的四分之一范围。
例如:
1 日期是 01.07.2017 - 3 季度, 2 日期是 01.04.2018 - 2 季度。
2 和 3 之间的范围应该是 [3,4,1]。
有人可以提供解决方案吗?
【问题讨论】:
什么是“quetters”?请阅读How to Ask、tour 和minimal reproducible example 以使这个问题变得更好,以便我们提供帮助 @BugFinder 很抱歉拼写错误。我指的是季度数字。 但是季度数字是多少?日期没有季度数字 @BugFinder 我们可以得到 2 个不同日期的 2 个季度。然后获取它们之间的季度列表。 如果你能给出第一次约会和第二次约会的非常具体的例子,那真的很有帮助。请注意,不同的系统可能使用不同的季度概念 - 如果您的意思是“1 月至 3 月、4 月至 6 月、7 月至 9 月、10 月至 12 月”,则值得明确说明。 【参考方案1】:试试这样的:
public static IEnumerable<int> GetQuarters(DateTime from, DateTime to)
if (to < from)
throw new ArgumentException($"to cannot be smaller than from", nameof(to));
DateTime date = from;
int lastQuarter = -1;
while (date <= to)
int currentQuarter = (date.Month + 2) / 3;
if (currentQuarter != lastQuarter)
yield return currentQuarter;
date = date.AddDays(1);
lastQuarter = currentQuarter;
如果你这样称呼它,它应该还给你3,4,1
:
var q = GetQuarters(new DateTime(2019, 08, 03), new DateTime(2020, 01, 01));
【讨论】:
感谢您的回答。【参考方案2】:尝试以下:
DateTime startDate = DateTime.Parse("2/10/17");
DateTime endDate = DateTime.Now;
DateTime previousQuarter = new DateTime(
startDate.Year, (4 * (startDate.Month / 4)) + 1, 1);
List<DateTime> quarters = new List<DateTime>();
DateTime quarter = previousQuarter;
while (quarter < endDate)
quarter = quarter.AddMonths(3);
quarters.Add(quarter);
【讨论】:
以上是关于如何获得两个日期之间的季度数字。在 2 和 1 之间 -> 2341的主要内容,如果未能解决你的问题,请参考以下文章