Solved

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

Posted on 2010-09-08
4
340 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
ID: 33633883
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
ID: 33633957
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
ID: 33634192
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
ID: 33661625
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

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Navigation is an important part of web design from a usability perspective. But it is often a pain when it comes to a developer’s perspective. By navigation, it often means menuing. This is less theory and more practical of how to get a specific gro…
There is an easy way, in .NET, to centralize the treatment of all unexpected errors. First of all, instead of launching the application directly in a Form, you need first to write a Sub called Main, in a module. Then, set the Startup Object to th…
This video teaches viewers about errors in exception handling.
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…

776 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