Specific comments:
1. what is this about:
TimeSpan usedTime = ts.Subtract(dt.TimeOfDay);
You know the time used from your previous calculation of the difference between end_time and DateTime.Now
2. why don't you calculate the time-taken before the Timer loop is terminated ?
This is where learning to debug is very important: set break-points (or use "Alert" messages) in your code, and check if the end-time DateTime you saved is really being used in the Timer 'Click event ... or, is that initial value somehow being ignored.
I note you define a start_time variable and assign the current time to it, but, then, never use it, never save it to the session ... why is that ?
Is there a possibility you are getting DateTime values for two different time-zones ... I don't think so, but I suggest you want to eliminate that as a possible cause.