i have this code to take a time in the past and generate a readable string to represent how long ago it was.
-
I would have thought Timespan.Hours would give you hours even if its multiple daye in the past but it looks like it breaks it down into its seperate components (days, months, etc). How would i get total hours ago (even if its more than 1 day?
-
Is there any cleaner way to write this type of code below as it seems pretty spagetti-ish.
Here is the code
DateTime when = GetDateTimeinPast();
TimeSpan ts = DateTime.Now.Subtract(when);
switch (ts.Days)
{
case 0:
if (ts.Hours < 1)
b.Append( ts.Minutes + " minutes ago");
else
b.Append( ts.Hours + " hours ago");
break;
case 1:
b.Append( " yesterday");
break;
case 2:
case 3:
case 4:
b.Append( "on " + when.DayOfWeek.ToString());
break;
default:
b.Append(ts.Days + " days ago");
break;
}
Use the
TotalHoursproperty or otherTotal[TimeUnit]properties in the timespan object.For a timespan of 1:10 (hh:mm), it equates to 1
Hoursand 10Minutesor 1.167TotalHoursand 70TotalMinutes.As for cleaning it up, stick to using if/else branches as you had earlier. switch/case will not help you with these conditions, only for specific values. Something like this:
C# 8 and up, you could use switch expressions and property patterns to condense it further to a single expression.