Hi,
This forum is been very helpful since I have started this project.. I hope to get some help regarding this...
I wanted the time difference between two days in HH:MM format. However, the code has to exclude weekends(Sat and Sun).
Thanks in Advance,
Prasanna.
AlanPosted Oct 4, 2007, 4:53 PM
Here's my attempt at that:
using System;
class Program
{
static void Main()
{
string startDate1 = "10/01/2007 10:00:00";
string endDate1 = "10/10/2007 19:00:00";
string dateDiff1 = BusinessTimeSpan(startDate1, endDate1);
Console.WriteLine("The time span between {0} and {1} excluding weekends is {2} h:m", startDate1, endDate1, dateDiff1);
string startDate2 = "09/28/2007 10:10:00";
string endDate2 = "10/08/2007 10:30:00";
string dateDiff2 = BusinessTimeSpan(startDate2, endDate2);
Console.WriteLine("The time span between {0} and {1} excluding weekends is {2} h:m", startDate2, endDate2, dateDiff2);
Console.ReadKey();
}
public static string BusinessTimeSpan(string startDate, string endDate)
{
string format = "MM/dd/yyyy HH:mm:ss";
DateTime dt1 = DateTime.ParseExact(startDate, format, null);
DateTime dt2 = DateTime.ParseExact(endDate, format, null);
if (dt1 == dt2)
return "00:00";
else if (dt1 > dt2)
{
// reverse dates so dt1 < dt2
DateTime dt = dt2;
dt2 = dt1;
dt1 = dt;
}
if (dt1.DayOfWeek == DayOfWeek.Saturday)
{
// adjust to midnight on folowing Monday
dt1 = dt1.AddDays(2);
dt1 = new DateTime(dt1.Year, dt1.Month, dt1.Day);
}
else if (dt1.DayOfWeek == DayOfWeek.Sunday)
{
dt1 = dt1.AddDays(1);
dt1 = new DateTime(dt1.Year, dt1.Month, dt1.Day);
}
if (dt2.DayOfWeek == DayOfWeek.Saturday)
{
// adjust to one second before midnight on preceding Friday
dt2 = new DateTime(dt2.Year, dt2.Month, dt2.Day);
dt2 = dt2.AddSeconds(-1);
}
else if (dt2.DayOfWeek == DayOfWeek.Sunday)
{
dt2 = new DateTime(dt2.Year, dt2.Month, dt2.Day);
dt2 = dt2.AddDays(-1).AddSeconds(-1);
}
DateTime temp = dt1;
int count = 0; // counts days between dt1 and dt2
while(true)
{
if (temp.Year == dt2.Year && temp.Month == dt2.Month && temp.Day == dt2.Day) break;
temp = temp.AddDays(1);
if (temp.DayOfWeek == DayOfWeek.Saturday)
temp = temp.AddDays(2);
else if (temp.DayOfWeek == DayOfWeek.Sunday)
temp = temp.AddDays(1);
count++;
}
int minutesDiff = count * 24 * 60 + (dt2.Hour * 3600 + dt2.Minute * 60 + dt2.Second - dt1.Hour * 3600 - dt1.Minute * 60 - dt1.Second) / 60;
int hoursDiff = minutesDiff/60;
minutesDiff = minutesDiff % 60;
return String.Format("{0:00}:{1:00}", hoursDiff, minutesDiff);
}
}