2010-09-30 15 views
6

Qualcuno sa come costruire un DateTime in .NET per essere il primo giorno del trimestre corrente?.Net DateTime trimestre fiscale

+4

che sta andando a dipendere interamente da come si definisce un quarto. –

+0

Quanti modi diversi puoi definire un trimestre fiscale? – PhilBrown

risposta

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

Questo fallirà se è chiamato esattamente alle 00:00 della mezzanotte del 1 ° gennaio. Fallirà anche se l'anno cambia ad un certo punto dopo che è stato definito 'quarterStarts'. Probabilmente vorrai modificare il test per includere solo il mese e il giorno. –

1

@yogesh è giusto, ecco quello che io uso in un sp sql:

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