Solved

Which is the best way to find Date difference between two dates in C#?

Posted on 2010-09-08
4
333 Views
Last Modified: 2012-05-10
Please submit a code snippet which is most efficient one.. I know about TimeSpan Class Method is there any other method thats more effective?
0
Comment
Question by:starlite551
4 Comments
 
LVL 65

Expert Comment

by:rockiroads
Comment Utility
Not that I know off. I thought it better to use what is available in dotnet and for c# that seems to be it.

A little discussion on that here including an alternative using vb namespaces http://www.c-sharpcorner.com/UploadFile/DipalChoksi/DateDiff_CS_DC09132006172429PM/DateDiff_CS_DC.aspx
0
 
LVL 10

Expert Comment

by:joriszwaenepoel
Comment Utility
dim date1 as datetime = ...
dim date2 as datetime = ...

dim datediff = date2.subtract(date1)

This gives you a TimeSpan object with all the information.  What makes you think this is not efficient?
0
 
LVL 13

Assisted Solution

by:Naman Goel
Naman Goel earned 125 total points
Comment Utility
actually DateTime.Subtract method should be fine as it is just doing simple subtraction, so this method will be too fast and good.
 
 

public TimeSpan Subtract(DateTime value)

{

    return new TimeSpan(this.InternalTicks - value.InternalTicks);

}



public DateTime Subtract(TimeSpan value)

{

    long internalTicks = this.InternalTicks;

    long num2 = value._ticks;

    if ((internalTicks < num2) || ((internalTicks - 0x2bca2875f4373fffL) > num2))

    {

        throw new ArgumentOutOfRangeException("value", Environment.GetResourceString("ArgumentOutOfRange_DateArithmetic"));

    }

    return new DateTime(((ulong) (internalTicks - num2)) | this.InternalKind);

}

Open in new window

0
 
LVL 14

Accepted Solution

by:
existenz2 earned 125 total points
Comment Utility
Using substract is the most efficient. Using ticks is a bit slower (see code example):
DateTime now = DateTime.Now;

            DateTime last = DateTime.Now.AddHours(-4);



            Stopwatch watch = new Stopwatch();

            watch.Start();

            for(int i = 0; i < 1000000; i++)

            {

                TimeSpan timeSpan = now.Subtract(last);

            }

            watch.Stop();

            Console.WriteLine(watch.ElapsedMilliseconds);



            Stopwatch watch2 = new Stopwatch();

            watch2.Start();

            for (int i = 0; i < 1000000; i++)

            {

                long ticks = now.Ticks - last.Ticks;

            }

            watch2.Stop();

            Console.WriteLine(watch2.ElapsedMilliseconds);



            Console.Read();

Open in new window

0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Introduction Hi all and welcome to my first article on Experts Exchange. A while ago, someone asked me if i could do some tutorials on object oriented programming. I decided to do them on C#. Now you may ask me, why's that? Well, one of the re…
This article will show, step by step, how to integrate R code into a R Sweave document
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now