c# - 根据给定日期计算当前或下一个年度季度的第一个月和当前年度季度的最后一个月

标签 c#

给定一个日期,我希望计算当前的年度季度。

如果今天的日期大于给定日期,我希望根据给定日期计算当前年度季度的最后一个月,以及下一年度季度的第一个月。

我经营的宿舍是 jan-mar、apr-jun、jul-sep 和 oct-dec。

如果日期输入为 01/10/2013,我希望输出为一月(下一年度的第一个月)和十二月(当前年度季度的最后一个月)。在这种情况下,月变量将包含值 10,日变量将包含值 1。

到目前为止我的尝试:

每个季度的最后一个月

if (month % 3 == 0)
  month += (DateTime.Now.Day > day ? 3 : 0);
if (month % 3 == 1)
  month += 2;
if (month % 3 == 2)
  month += 1;

每个季度的第一个月

if (month % 3 == 1) // jan/mapr/jul/oct
  month += (DateTime.Now.Day > day ? 3 : 0);
if (month % 3 == 2) // feb/may/aug/nov
  month += 2;
if (month % 3 == 0) // mar/jun/sep/dec
  month += 1;

最佳答案

您可以使用整数数学得到当前季度。

int currentQuarter = ((month-1)/3)+1;

这是有效的,因为整数除法总是会被截断,所以如果月份是 1 到 3,你将得到 0 到 2 超过 3,这将等于 0。第 4 到 6 个月将得到 3-5 超过 3,这将等于 1,依此类推。

对于给定的季度,第一个月和最后一个月将由:

int firstMonthOfQuarter = (quarter*3)-2;

int lastMonthOfQuarter = (quarter*3);

请注意,这些中的 quarter 将是您想要的月份所在的季度。如果您想要当前季度,请使用它。如果您想要下一个季度,则执行 quarter+=1 并检查溢出(即,如果季度为 5,则它实际上为 1)。或者,您可以将 %12 添加到第一个月和最后一个月的计算中,然后它将在 5 的四分之一处正常工作。

int firstMonthOfQuarterOfNextQuarter = (((quarter+1)*3)-2)%12;
int lastMonthOfQuarterOfNextQuarter = ((quarter+1)*3)%12;

我对如何将它们放在一起感到有点困惑,因为您要么想要当前季度(如我第一行中给出的那样),要么在某些情况下还需要下一季度和当前季度的第一个月和最后一个月.我不知道你是如何退回这个的,所以你必须自己把它放在一起。

关于c# - 根据给定日期计算当前或下一个年度季度的第一个月和当前年度季度的最后一个月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18065323/

相关文章:

c# - LAB 到 RGB 使用 Lcms2 给出奇怪的结果

c# - WPF 组合框值和显示文本

c# - 检查枚举属性中是否为 null

c# - F#:将 FSharpRef 转换为 C# 对象引用

c# - 内存不足

c# - 如何避免重复 XAML?

c# - 在 MonoGame 中运行时加载 MGCB?

c# - 在构建过程中运行 c# 控制台应用程序

c# - 如何在不使用mysql中的函数的情况下使每个单词的首字母大写?

c# - ASP.NET 按日期范围对多个 SQL 数据库表进行排序