Click here to Skip to main content
6,595,854 members and growing! (18,344 online)
Email Password   helpLost your password?
Languages » C# » General     Intermediate

C# DateTime Library

By Michael Ceranski

Common DateTime routines for C#.
C#, Windows, .NET 1.0, .NET 1.1, .NET 2.0VS.NET2003, VS2005, Dev
Posted:28 Feb 2005
Updated:19 Dec 2005
Views:180,492
Bookmarked:84 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
38 votes for this article.
Popularity: 5.33 Rating: 3.37 out of 5
5 votes, 13.2%
1
5 votes, 13.2%
2
4 votes, 10.5%
3
10 votes, 26.3%
4
14 votes, 36.8%
5

Introduction

I recently made the transition from Delphi to C#. I noticed that some of the datetime utilities that I used to use were not available in C#. So I recreated them. Hopefully this will save someone some time in the future.

The Code

using System;
namespace Concepts2Code.Utilities
{
    /// <summary>

    /// Common DateTime Methods.

    /// </summary>

    /// 


    public enum Quarter
    {
        First = 1,
        Second = 2,
        Third = 3,
        Fourth = 4
    }

    public enum Month
    {
        January = 1,
        February = 2,
        March = 3,
        April = 4,
        May = 5,
        June = 6,
        July = 7,
        August = 8,
        September = 9,
        October = 10,
        November = 11,
        December = 12
    }

    public class DateUtilities
    {
        #region Quarters

        public static DateTime GetStartOfQuarter( int Year, Quarter Qtr )
        {
            if( Qtr == Quarter.First )    // 1st Quarter = January 1 to March 31

                return new DateTime( Year, 1, 1, 0, 0, 0, 0 );
            else if( Qtr == Quarter.Second ) // 2nd Quarter = April 1 to June 30

                return new DateTime( Year, 4, 1, 0, 0, 0, 0 );
            else if( Qtr == Quarter.Third ) // 3rd Quarter = July 1 to September 30

                return new DateTime( Year, 7, 1, 0, 0, 0, 0 );
            else // 4th Quarter = October 1 to December 31

                return new DateTime( Year, 10, 1, 0, 0, 0, 0 );
        }

        public static DateTime GetEndOfQuarter( int Year, Quarter Qtr )
        {
            if( Qtr == Quarter.First )    // 1st Quarter = January 1 to March 31

                return new DateTime( Year, 3, 
                       DateTime.DaysInMonth( Year, 3 ), 23, 59, 59, 999 );
            else if( Qtr == Quarter.Second ) // 2nd Quarter = April 1 to June 30

                return new DateTime( Year, 6, 
                       DateTime.DaysInMonth( Year, 6 ), 23, 59, 59, 999 );
            else if( Qtr == Quarter.Third ) // 3rd Quarter = July 1 to September 30

                return new DateTime( Year, 9, 
                       DateTime.DaysInMonth( Year, 9 ), 23, 59, 59, 999 );
            else // 4th Quarter = October 1 to December 31

                return new DateTime( Year, 12, 
                       DateTime.DaysInMonth( Year, 12 ), 23, 59, 59, 999 );
        }

        public static Quarter GetQuarter( Month Month )
        {
            if( Month <= Month.March )
            // 1st Quarter = January 1 to March 31

                return Quarter.First;
            else if( ( Month >= Month.April ) && ( Month <= Month.June ) )
            // 2nd Quarter = April 1 to June 30

                return Quarter.Second;
            else if( ( Month >= Month.July ) && ( Month <= Month.September ) )
            // 3rd Quarter = July 1 to September 30

                return Quarter.Third;
            else // 4th Quarter = October 1 to December 31

                return Quarter.Fourth;
        }

        public static DateTime GetEndOfLastQuarter()
        {                 
            if( (Month)DateTime.Now.Month <= Month.March )
            //go to last quarter of previous year

                return GetEndOfQuarter( DateTime.Now.Year - 1, Quarter.Fourth);
            else //return last quarter of current year

                return GetEndOfQuarter( DateTime.Now.Year, 
                  GetQuarter( (Month)DateTime.Now.Month));
        }

        public static DateTime GetStartOfLastQuarter()
        {
            if( (Month)DateTime.Now.Month <= Month.March )
            //go to last quarter of previous year

                return GetStartOfQuarter( DateTime.Now.Year - 1, Quarter.Fourth);
            else //return last quarter of current year

                return GetStartOfQuarter( DateTime.Now.Year, 
                  GetQuarter( (Month)DateTime.Now.Month));
        }

        public static DateTime GetStartOfCurrentQuarter()
        {
            return GetStartOfQuarter( DateTime.Now.Year, 
                   GetQuarter( (Month)DateTime.Now.Month ));
        }

        public static DateTime GetEndOfCurrentQuarter()
        {
            return GetEndOfQuarter( DateTime.Now.Year, 
                   GetQuarter( (Month)DateTime.Now.Month ));
        }
        #endregion

        #region Weeks
        public static DateTime GetStartOfLastWeek()
        {
            int DaysToSubtract = (int)DateTime.Now.DayOfWeek + 7;
            DateTime dt = 
              DateTime.Now.Subtract(System.TimeSpan.FromDays( DaysToSubtract ) );
            return new DateTime( dt.Year, dt.Month, dt.Day, 0, 0, 0, 0 );
        }

        public static DateTime GetEndOfLastWeek()
        {
            DateTime dt = GetStartOfLastWeek().AddDays(6);
            return new DateTime( dt.Year, dt.Month, dt.Day, 23, 59, 59, 999 );
        }

        public static DateTime GetStartOfCurrentWeek()
        {
            int DaysToSubtract = (int)DateTime.Now.DayOfWeek ;
            DateTime dt = 
              DateTime.Now.Subtract( System.TimeSpan.FromDays( DaysToSubtract ) );
            return new DateTime( dt.Year, dt.Month, dt.Day, 0, 0, 0, 0 );
        }

        public static DateTime GetEndOfCurrentWeek()
        {
            DateTime dt = GetStartOfCurrentWeek().AddDays(6);
            return new DateTime( dt.Year, dt.Month, dt.Day, 23, 59, 59, 999 );
        }
        #endregion

        #region Months

        public static DateTime GetStartOfMonth( Month Month, int Year )
        {
             return new DateTime( Year, (int)Month, 1, 0, 0, 0, 0 );
        }

        public static DateTime GetEndOfMonth( Month Month, int Year )
        {
            return new DateTime( Year, (int)Month, 
               DateTime.DaysInMonth( Year, (int)Month ), 23, 59, 59, 999 );
        }

        public static DateTime GetStartOfLastMonth()
        {
            if( DateTime.Now.Month == 1 )
                return GetStartOfMonth( 12, DateTime.Now.Year - 1);
            else
                return GetStartOfMonth( DateTime.Now.Month -1, DateTime.Now.Year );
        }

        public static DateTime GetEndOfLastMonth()
        {
            if( DateTime.Now.Month == 1 )
                return GetEndOfMonth( 12, DateTime.Now.Year - 1);
            else
                return GetEndOfMonth( DateTime.Now.Month -1, DateTime.Now.Year );
        }

        public static DateTime GetStartOfCurrentMonth()
        {
            return GetStartOfMonth( DateTime.Now.Month, DateTime.Now.Year );
        }

        public static DateTime GetEndOfCurrentMonth()
        {
            return GetEndOfMonth( DateTime.Now.Month, DateTime.Now.Year );
        }
        #endregion

        #region Years
        public static DateTime GetStartOfYear( int Year )
        {
            return new DateTime( Year, 1, 1, 0, 0, 0, 0 );
        }

        public static DateTime GetEndOfYear( int Year )
        {
            return new DateTime( Year, 12, 
              DateTime.DaysInMonth( Year, 12 ), 23, 59, 59, 999 );
        }

        public static DateTime GetStartOfLastYear()
        {
            return GetStartOfYear( DateTime.Now.Year - 1 );
        }

        public static DateTime GetEndOfLastYear()
        {
            return GetEndOfYear( DateTime.Now.Year - 1 );
        }

        public static DateTime GetStartOfCurrentYear()
        {
            return GetStartOfYear( DateTime.Now.Year );
        }

        public static DateTime GetEndOfCurrentYear()
        {
            return GetEndOfYear( DateTime.Now.Year );
        }
        #endregion        

        #region Days
        public static DateTime GetStartOfDay( DateTime date )
        {
            return new DateTime( date.Year, date.Month, date.Day, 0, 0, 0, 0 );
        }

        public static DateTime GetEndOfDay( DateTime date )
        {
            return new DateTime( date.Year, date.Month, 
                                 date.Day, 23, 59, 59, 999 );
        }
        #endregion
      }
}

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Michael Ceranski


Member
Michael is the co-founder and master consultant for Concepts2Code, a software consulting company based in Amherst, New York. He's been programming since the early 1990's. His vast programming experience includes VB, Delphi, C#, ASP, ASP.NET, Coldfusion and PHP. Michael also is a Microsoft Certified Application Developer and a Certified Technology Specialist for SQL Server.

Visit his blog.
Occupation: Web Developer
Company: Concepts2Code
Location: United States United States

Other popular C# articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 34 (Total in Forum: 34) (Refresh)FirstPrevNext
Generalthank you very much. PinmemberHowdy Nun12:47 20 May '09  
GeneralGetEndOfLastQuarter and GetStartOfLastQuarter Problem Pinmemberedwardxu88812:29 19 Apr '09  
GeneralBugs Depending On Time Of Execution Pinmemberjason265357:45 26 Dec '08  
GeneralDateTime with zero month and day PinmemberElGuroProgramador3:24 6 Aug '08  
GeneralRe: DateTime with zero month and day PinmemberMichael Ceranski10:44 12 Aug '08  
GeneralThanks! PinmemberJohnnyHax16:33 24 Apr '08  
GeneralToad uses my library PinmemberMichael Ceranski6:57 9 Apr '08  
GeneralDelphi x C# (Incompatibility) Pinmembervinny_cwb3:27 14 Mar '08  
GeneralThank you. Pinmember0112691:10 3 Oct '07  
QuestionPlease help Pinmemberhis_richness19:01 16 Nov '06  
AnswerRe: Please help PinmemberMichael Ceranski11:19 21 Nov '06  
GeneralSQL Server Trips Over This... PinmemberMikeYeager11:50 12 Mar '06  
QuestionDate Format Problem PinmemberSivagnanam1:15 28 Feb '06  
GeneralMore suggestions PinmemberRichard Cleaver4:42 28 Dec '05  
GeneralRe: More suggestions PinmemberOmer van Kloeten11:06 28 Dec '05  
GeneralWhat am I doing wrong? Pinmembermdengler8:03 16 Dec '05  
GeneralRe: What am I doing wrong? PinmemberMichael Ceranski5:13 18 Dec '05  
GeneralRe: What am I doing wrong? Pinmembermdengler5:50 18 Dec '05  
GeneralRe: What am I doing wrong? PinmemberKenGuru23:19 19 Dec '05  
GeneralRe: What am I doing wrong? Pinmembermdengler4:14 20 Dec '05  
GeneralUnit Tests? PinmemberBil Simser0:31 12 May '05  
GeneralSimplification PinmemberChristian Falk21:50 12 Apr '05  
GeneralFiscal Year vs Calendar Year PinmemberDarren Pruitt5:23 14 Mar '05  
GeneralC# standards PinmemberDrew Noakes1:12 11 Mar '05  
GeneralImprove readability... PinmemberAlexander Turlov15:14 9 Mar '05  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 19 Dec 2005
Editor: Smitha Vijayan
Copyright 2005 by Michael Ceranski
Everything else Copyright © CodeProject, 1999-2009
Web22 | Advertise on the Code Project