2010-09-30 43 views
6

有谁知道如何在.NET中构建DateTime以成为本季度的第一天?.Net DateTime会计季度

+4

那将如何定义的四分之一完全依赖。 – 2010-09-30 18:20:30

+0

您可以定义财政季度有多少种不同的方式? – PhilBrown 2011-03-18 14:31:03

回答

6
public DateTime GetCurrentQuarter(DateTime date) 
{ 
    int startingMonthOfQuarter = (((date.Month - 1)/3) * 3) + 1; 

    return new DateTime(date.Year, startingMonthOfQuarter, 1); 
} 
3
 var currentTime = DateTime.Now; 
     var year = currentTime.Year; 
     DateTime[] quarterStarts = {new DateTime(year, 1, 1), new DateTime(year, 4, 1), new DateTime(year, 7, 1), new DateTime(year, 10, 1)}; 
     var currentStart = quarterStarts.Where(s => s < currentTime).Last(); 
+1

如果它在1月1日午夜12点正好被调用,那么这将会失败。如果在定义'quarterStarts'后的某个点发生年份变化,它也将失败。您可能希望修改测试以包括月份和日期。 – 2010-09-30 19:37:36

1

@yogesh是正确的,这是我在SQL SP利用:

CREATE FUNCTION [dbo].[fn_startOfQtr](@dt DATETIME) 
RETURNS DATETIME AS 
BEGIN 
    declare @ret DATETIME 
    declare @qtr int 

    set @qtr = ((month(@dt)-1)/3)+1 
    set @ret = cast(str(@qtr * 3 - 2) + '/1/' + str(year(@dt)) as DATETIME) 
    return @ret 
END