In this article, we are going to look at how to calculate the date difference between two dates in C#. Like other OOP languages, C# has two data types to store the results.

  • DateTime Structure
  • TimeSpan Structure

DateTime Struct

DateTime Structure is a child of System namespace and no any other external libraries needed for this. Normally DateTime constructor takes minimum 3 parameters; year, month and date. Further, the constructor can be overloaded with multiple parameters to get the time range. To take the date and time ranges, we are can Calendar type as well. But it is recommended to use DateTime struct, as it is the most efficient and accurate way.

            /* Year=2019 Month=03 Date=01*/
            DateTime datetime = new DateTime(2019, 03, 01);

            /* Year=2019 Month=03 Date=01 Hour=00 Minute=00 Second=00*/
            DateTime datetime = new DateTime(2019, 03, 01, 00, 00, 00);

TimeSpan Struct

TimeSpan is considered as the data type used to store the length of time. Just like the DateTime struct, it also implemented as a struct and has several overloaded constructors. TimeSpan Structure too is a child of System namespace and in our example, we are going to use it to store the difference between the dates. Hence, TimeSpan can be used for many date manipulations as shown below.

            TimeSpan days = TimeSpan.FromDays(1);
            TimeSpan hours = TimeSpan.FromHours(1);
            TimeSpan mins = TimeSpan.FromMinutes(1);

            Console.WriteLine(days);
            Console.WriteLine(hours);
            Console.WriteLine(mins);

What is a Struct?

Unlike classes, structs can be used without instantiating with the new keyword. Structs provide better performance when the value-type collection to be grouped is small. Structs cannot be inherited either from the same struct type or even a different class. To define a struct, we need to use the word struct before the name of the class.

        public struct Employee
        {
            public int age;

            public void setAge(int newAge)
            {
                age = newAge;
            }
        }

In this example, we are calculating the difference between the dates using 2 methods.

  • Date Difference by Subtract() Method
  • Date Difference by Subtraction(-) Operator

Date Difference by Subtract() Method

DateTime structure has its own predefined method Subtract() which takes a date as the argument and returns the difference between the specified dates. It results in TimeSpan value and we can use different properties defined by the TimeSpan to display the output as per our requirement.

            public void getDateDiff(DateTime date1, DateTime date2)
            {
                DateTime oldDate = new System.DateTime(date1.Year, date1.Month,
                                     date1.Day, date1.Hour, date1.Minute, date1.Second);
                DateTime newDate = new System.DateTime(date2.Year, date2.Month,
                                     date2.Day, date2.Hour, date2.Minute, date2.Second);
                TimeSpan dateDiff = newDate.Subtract(oldDate); //using substraction method
                Console.WriteLine("Date Difference is = {dateDiff.Days}");
            }

Now call the method:

            static void main(string[] args)
            {
                DateTime date1 = new System.DateTime(2019, 3, 1, 12, 0, 0);
                DateTime date2 = new System.DateTime(2019, 3, 2, 13, 0, 0);
                DateDifference dateDifference = new DateDifference();
                dateDifference.getDateDiff(date1, date2); //output-> 1

            }

In here we are using only the Days property of the TimeSpan structure. Nevertheless, there are many other properties like Hours, Minutes, Seconds, TotalDays etc.

Date Difference by Subtraction (-) Operator

The easier way of finding the date difference is by using the minus operator. In the below example, we’ll be creating a method called getDateDiff() and passes two DateTime arguments to it. From the passed arguments; Year, Minutes, Seconds etc. are extracted and passed to the constructor. Finally, getDateDiff() method is invoked in the main method using the values of the user. This method too results in the same output as the Subtract() method.

            public void getDateDiff(DateTime date1, DateTime date2)
            {
                DateTime oldDate = new System.DateTime(date1.Year, date1.Month,
                                     date1.Day, date1.Hour, date1.Minute, date1.Second);
                DateTime newDate = new System.DateTime(date2.Year, date2.Month,
                                     date2.Day, date2.Hour, date2.Minute, date2.Second);
                TimeSpan dateDiff = newDate - oldDate; //using substraction operator
                Console.WriteLine("Date Difference is = {dateDiff.Days}");
            }

Call the method:

            static void main(string[] args)
            {
                DateTime date1 = new System.DateTime(2019, 3, 1, 12, 0, 0);
                DateTime date2 = new System.DateTime(2019, 3, 2, 13, 0, 0);
                DateDifference dateDifference = new DateDifference();
                dateDifference.getDateDiff(date1, date2);  

            }

Other methods

Apart from the previously stated 2 methods, VB.NET namespace provides DateDiff() function to calculate the difference between two dates. For that, we need to add the VB script library to the C# project . So far we have calculated the date difference using two methods, but one of the important points to be noticed is that both the dates are considered to be in the same time zone. What happens if the dates are in different time zones? For that, we can format our final output as follows.

TimeSpan withTimezones = newDate.ToUniversalTime().Subtract(oldDate.ToUniversalTime());

 

By using ToUniversalTime() method, we are converting the two values into a common time zone before subtraction.

Related Articles

Get local IP address list using C#

Bind chart control using C# and Linq

C# Prerequisites

Last modified: March 2, 2019

Comments

Write a Reply or Comment

Your email address will not be published.