以下是一个财政年度的季度
April to June - Q1
July to Sep - Q2
Oct to Dec - Q3
Jan to March - Q4
如果输入日期的月份如上所述,我需要以季度数字表示输出。
例如,
如果我提供输入日期(比如 1月2日),我需要输出为Q4
。
如果我将输入设为( Jun 5 ),则输出应为Q1
。
根据输入日期,我需要季度数字。
答案 0 :(得分:22)
您可以简单地将扩展方法写入DateTime
public static int GetQuarter(this DateTime date)
{
if (date.Month >= 4 && date.Month <= 6)
return 1;
else if (date.Month >= 7 && date.Month <= 9)
return 2;
else if (date.Month >= 10 && date.Month <= 12)
return 3;
else
return 4;
}
并将其用作
DateTime dt = DateTime.Now;
dt.GetQuarter();
答案 1 :(得分:14)
这是“正常年份”。我想你可以调整样本:
string.Format("Q{0}", (date.Month + 2)/3);
答案 2 :(得分:11)
public static int GetQuarter(DateTime date)
{
int[] quarters = new int[] { 4,4,4,1,1,1,2,2,2,3,3,3 };
return quarters[date.Month-1];
}
答案 3 :(得分:9)
实现这一目标的最简单一致的方法:
<强>正强>
Math.Ceiling(date.Month / 3.0)
财政(刚刚向上移动了2 + 1个季度)
Math.Ceiling(date.Month / 3.0 + 2) % 4 + 1
01.01.2016 00:00:00 -> Q1 -> FQ4
01.02.2016 00:00:00 -> Q1 -> FQ4
01.03.2016 00:00:00 -> Q1 -> FQ4
01.04.2016 00:00:00 -> Q2 -> FQ1
01.05.2016 00:00:00 -> Q2 -> FQ1
01.06.2016 00:00:00 -> Q2 -> FQ1
01.07.2016 00:00:00 -> Q3 -> FQ2
01.08.2016 00:00:00 -> Q3 -> FQ2
01.09.2016 00:00:00 -> Q3 -> FQ2
01.10.2016 00:00:00 -> Q4 -> FQ3
01.11.2016 00:00:00 -> Q4 -> FQ3
01.12.2016 00:00:00 -> Q4 -> FQ3
结果是介于1和4之间的值。几乎任何环境都有CEIL函数,所以这也适用于任何语言。
答案 4 :(得分:6)
int CurrentQuarter = (int)Math.Floor(((decimal)DateTime.Today.Month + 2) / 3);
或将DateTime.Today更改为所需日期。
答案 5 :(得分:6)
扩展方法和较少的比较:
public static class DateTimeExtension
{
public static int GetQuarter(this DateTime dateTime)
{
if (dateTime.Month <= 3)
return 1;
if (dateTime.Month <= 6)
return 2;
if (dateTime.Month <= 9)
return 3;
return 4;
}
}
答案 6 :(得分:3)
在sql中,它只是
((((month(@mydate)-1)/3)+3) % 4) + 1
用它来检查:
declare @mydate datetime
set @mydate = '2011-01-01'
while @mydate <= '2011-12-31'
begin
print ((((month(@mydate)-1)/3)+3) % 4) + 1
set @mydate = dateadd(month, 1, @mydate)
end
或者如果你想在.net中这样做,就像
String.Format("Q{0}", ((((date.Month-1)/3)+3) % 4) + 1);
答案 7 :(得分:1)
既然你在 C# 中有关系模式,它可以很容易地用单个 switch 表达式编写
public static string FiscalQuarter(this DateTime date)
{
var qtr = date.Month switch
{
< 4 => 4,
< 7 => 1,
< 10 => 2,
_ => 3
};
return $"Q{qtr}";
}
答案 8 :(得分:0)
答案 9 :(得分:0)
此方法允许您指定季度的开始月份,并提供整个期间的年份。
public string GetQuarterPeriod(DateTime date, int quarterStartMonth)
{
var quarterDateOffset = date.AddMonths(1 - quarterStartMonth);
return $"Q{Math.Ceiling((decimal)quarterDateOffset.Month / 3)} {quarterDateOffset.Year}"
+ (quarterStartMonth == 1 ? "" : $"/{quarterDateOffset.Year + 1}");
}
,并提供:
GetQuarterPeriod(new DateTime(2018, 4, 1), 4) -> "Q1 2018/2019"
GetQuarterPeriod(new DateTime(2018, 1, 1), 1) -> "Q1 2018"
功能说明如果月份是1月(1),则约束为一年。
答案 10 :(得分:0)
我来这里的目的是为给定的季度和年份的第一天创建一个DateTime
(这可以理解为与上述问题相反,但相关),并采用了@wezzix的答案来创建: / p>
public DateTime GetFirstDayOfQuarterFromYearAndQuarter(int year, int quarter)
{
var month = 3 * quarter - 2;
return new DateTime(year, month, 1);
}