Time span calculation for hours and minutes in C# - c#

The final result should display the user the time span between the start hour and the end hour.(e.g. start work at 06:30 AM and finished at 18:30 PM, the result to display should be 12 hours).
Now, I have to DateTime parameters; fromTime and toTime
Each DateTime parameter have an hour in 24 hour format, and also might have a minutes value of 30 min.
What I willing to do is to get the time span between those DateTime parameters.
For the hours I used this method:
Public TimeSpan GetHourSpan(DateTime fromTime, DateTime toTime)
{
TimeSpan fromH = TimeSpan.FromHours(fromTime.Hour);
TimeSpan toH = TimeSpan.FromHours(toTime.Hour);
TimeSpan hourTotalSpan = toH.Subtract(fromH);
return hourTotalSpan;
}
This is great, my problem is to get the time span in minutes if there is, and finally add it to the TimeSpan object to display.
If both have 30 min time span in the above way will return 0, and than I have to start check every parameter if it have a value in the min property.
Isn't there an easy way to get time span for hours and min together?

TimeSpan span = toTime - fromTime;
// Split into hours:minutes: span.Hours, span.Minutes
// Total span in hours: span.TotalHours
// Total span in minutes (hours * 60): span.TotalMinutes

If you deduct a DateTime from a DateTime, the result is a a TimeSpan. So you can simply take
TimeSpan result = toTime-fromTime;
int hours = result.Hours;
int minutes = result.Minutes;

TimeSpan span = toTime - fromTime;

public double DurationinMins(DateTime startDt, DateTime endDt)
{
var ts = endDt.Subtract(startDt);
return ts.TotalMinutes;
}

Related

How can I prevent negative time in using military time format

when my starttime = "19:00" PM then my endtime ="01:30" AM
the answer is negative , how can i prevent negative result in time?
string startime = record.TimeStart;
string endtime = record.TimeFinish;
TimeSpan span = DateTime.Parse(endtime).Subtract(DateTime.Parse(startime));
string hours_spent = string.Format(
"{0:D2}:{1:D2}:{2:D2}",
span.Hours, span.Minutes, span.Seconds);
You are crossing midnight, so the actual comparison is (using today's date as an example):
[2015-10-12 01:30] - [2015-10-12 19:00]
which is -17 hrs and 30 minutes. If you want to convert that to a positive time then either add a date component or add 24 hours to the time span:
if(span.Hours < 0)
span = span.AddDays(1);
Add one day to endtime if it (or more precisely, its time component) is earlier than starttime's. Something like this:
var startDateTime = DateTime.Parse(starttime).Time;
var endDateTime = DateTime.Parse(endtime).Time;
if (endDateTime < startDateTime)
{
endDateTime += TimeSpan.FromDays(1);
}
TimeSpan timeSpent = endDateTime - startDateTime;

How do i get the minutes part when i subtract two time values

I want minutes part when i subtract two time values.
I am subtracting current time with 11:30 PM and the result i need in minutes.
I am trying the following code in c#.
TimeSpan eTs = new TimeSpan(23, 30, 00);
int min = System.DateTime.Now.Minute - eTs.Minutes;
but its giving wrong values.
Any help?
Thanks in advance.
It gives wrong value because you are substracting ints. It could even give negative numbers. You should substract the TimeSpan from the DateTime, which gives you another DateTime and use it's Minute property.
var eTs = new TimeSpan(23, 30, 00);
var min = (System.DateTime.Now - eTs).Minute;
EDIT
I am subtracting current time with 11:30 PM and the result i need in
minutes.
No, you are substracting 23 hours and 30 minutes from the current date time.
If you want to know how much minutes have passed since 11:30 PM (what day/month/year), you should:
var min = (System.DateTime.Now - somePastDate).TotalMinutes; //somePastDate must be a DateTime
Do you wanna subtract 2 dateTime and Get the total in minutes try this:
DateTime data = DateTime.Now;
DateTime data2 = DateTime.Now.AddDays(-2);
TimeSpan sub = data - data2;
Console.WriteLine(sub.TotalMinutes);
Or If you wanna subtract minutes from a datetime try this
TimeSpan eTs = new TimeSpan(23, 30, 00);
DateTime data2 = System.DateTime.Now.AddMinutes(-eTs.TotalMinutes);
Console.WriteLine(data2);

how to subtract 5 mins time from this "4:30 pm" string

I have a problem declaring a time variable with a value of 5 minutes and I want to use this variable to subtract to 4:30 pm string. But I don't know how do I declare that variable. Is there an easy way to subtract that 4:30 pm string?
while (reader.Read())
{
AMSetTime = (reader["AMOutTime"].ToString());
PMSetTime = (reader["PMOutTime"].ToString());
}
TimeSpan timeUpdateCount = DateTime.Parse(PMSetTime).TimeOfDay;
TimeSpan minusFiveMinutes(00:05); //Error here
We define timespan of minutes with the following way:
TimeSpan interval = TimeSpan.FromMinutes(5);
Then you can use this timespan as you wish.
Specifically, in your case you can try the following:
TimeSpan interval = TimeSpan.FromMinutes(5);
TimeSpan timeUpdateCount = DateTime.Parse(PMSetTime).TimeOfDay-interval;

How to get Difference hours Between two date

I want get diffrences Day,Hour and Day between two days.
I use belowe Code :
DateTime LastDate = DateTime.Parse("2/12/2015 11:24:23 AM");
int differenceDay = DateTime.Now.Subtract(LastDate).Days;
int differenceHoure = DateTime.Now.Hour - LastDate.Hour;//returns -11
int differenceMinute = DateTime.Now.Minute - LastDate.Minute;
When I want get Hours its return mines (-11 e.t).
How can I get positive Diffrence Hour ?
anyone can you help me?
I want get Last Dat and show its by string how days afterd now.
You're subtracting component-wise (i.e. "this hour-of-day minus that hour-of-day, this minute-of-hour minus that minute-of-hour"). Don't do that - it won't work if the current hour-of-day is earlier than the hour-of-day of lastDate, or the same for minute-of-hour - you get a negative value, exactly as you've seen.
Instead, subtract one DateTime from another to get a TimeSpan and use that single TimeSpan for all the components:
DateTime lastDate = DateTime.Parse("2/12/2015 11:24:23 AM");
TimeSpan difference = DateTime.Now - lastDate;
int days = difference.Days;
int hours = difference.Hours;
int minutes = difference.Minutes;
That will still be negative if lastDate is after DateTime.Now, of course.
Note that this will give you a result which is meaningful if you display all three components. For example, it might give you "2 days, 3 hours and 10 minutes". If instead you want to represent the same TimeSpan as "2.194 days" or "51.166 hours" or "3160 minutes" then you can use TotalDays, TotalHours and TotalMinutes.
If you always want a positive TimeSpan - the equivalent of Math.Abs but for TimeSpan you can just use TimeSpan.Duration():
TimeSpan difference = (DateTime.Now - lastDate).Duration();

Problem finding difference between two time intervals

How can I find difference between two time intervals.
Like 13:45:26.836 - 14:24:18.473 which is of the format "Hour:Min:Sec:Millisecs". Now i need to find the time difference between these two times.
How can i do this in C#.?
Thanks in advance.
Basically, what you need to do is put those time values into DateTime structures. Once you have your two DateTime variables, just subtract them from one another - the result is a variable of type TimeSpan:
DateTime dt1 = new DateTime(2010, 5, 7, 13, 45, 26, 836);
DateTime dt2 = new DateTime(2010, 5, 7, 14, 24, 18, 473);
TimeSpan result = dt2 - dt1;
string result2 = result.ToString();
TimeSpan has a ton of properties that get sets - the difference in all sorts of units, e.g. milliseconds, seconds, minutes etc. You can also just do a .ToString() on it to get a string representation of the result. In result2, you'll get something like this:
00:38:51.6370000
Is that what you're looking for?
i'm posting an example;
you can check it and adapt your program,
/* Read the initial time. */
DateTime startTime = DateTime.Now;
Console.WriteLine(startTime);
/* Do something that takes up some time. For example sleep for 1.7 seconds. */
Thread.Sleep(1700);
/* Read the end time. */
DateTime stopTime = DateTime.Now;
Console.WriteLine(stopTime);
/* Compute the duration between the initial and the end time.
* Print out the number of elapsed hours, minutes, seconds and milliseconds. */
TimeSpan duration = stopTime - startTime;
Console.WriteLine("hours:" + duration.Hours);
Console.WriteLine("minutes:" + duration.Minutes);
Console.WriteLine("seconds:" + duration.Seconds);
Console.WriteLine("milliseconds:" + duration.Milliseconds);
Find the number of seconds; subtract both numbers and then you can figure out the time difference. Depending on the programming language you use, I am positive their must be a library that can handle it.
//Start off with a string
string time1s = "13:45:26.836";
string time2s = "14:24:18.473";
TimeSpan interval = DateTime.Parse(time2s) - DateTime.Parse(time1s);
This will produce a result of:
Days 0 int Hours 0 int
Milliseconds 637 int
Minutes 38 int Seconds 51 int
Ticks 23316370000 long
TotalDays 0.02698653935185185 double
TotalHours 0.64767694444444446 double
TotalMilliseconds 2331637.0 double
TotalMinutes 38.860616666666665 double
TotalSeconds 2331.6369999999997 double

Categories

Resources