Romilton Fernando
Romilton Fernando

Reputation: 953

remove seconds from timespan using c#

I want to remove the seconds from timespan using c#

My code is here:

TimeSpan lateaftertime = new TimeSpan();
lateaftertime =  lateafter - Convert.ToDateTime(intime) ;

It returns the value 00:10:00

But i want the below output :00:10 only not seconds field :00.

Upvotes: 19

Views: 24493

Answers (4)

Heinzi
Heinzi

Reputation: 172220

Note that a TimeSpan does not have a format. It's stored in some internal representation¹ which does not resemble 00:10:00 at all.

The usual format hh:mm:ss is only produced when the TimeSpan is converted into a String, either explicitly or implicitly. Thus, the conversion is the point where you need to do something. The code example in your question is "too early" -- at this point, the TimeSpan is still of type TimeSpan.

To modify the conversion to String, you can either use String.Format, as suggested in V4Vendetta's answer, or you can use a custom format string for TimeSpan.ToString (available with .NET 4):

string formattedTimespan = ts.ToString("hh\\:mm");

Note that this format string has the following drawbacks:

  • If the TimeSpan spans more than 24 hours, it will only display the number of whole hours in the time interval that aren't part of a full day.

    Example: new TimeSpan(26, 0, 0).ToString("hh\\:mm") yields 02:00. This can be fixed by adding the d custom format specifier.

  • Custom TimeSpan format specifiers don't support including a sign symbol, so you won't be able to differentiate between negative and positive time intervals.

    Example: new TimeSpan(-2, 0, 0).ToString("hh\\:mm") yields 02:00.


¹ TimeSpan is just a thin wrapper around a 64-bit integer containing the number of ticks (10,000 ticks = 1 millisecond). Thus, 00:10:00 will be stored as the number 6,000,000,000.

Upvotes: 16

ˈvɔlə
ˈvɔlə

Reputation: 10242

Since there can be more than hours and minutes in a timespan string representation, the most reliable code for removing just the seconds and nothing else would be something like this:

var text = TimeSpan.FromDays(100).ToString(); // "100.00:00:00"
var index = text.LastIndexOf(':');
text = text.Substring(0, index); // "100.00:00"

Upvotes: 0

Pabitra Dash
Pabitra Dash

Reputation: 1513

TimeSpan newTimeSpan = new TimeSpan(timeSpan.Hours, timeSpan.Minutes, 0);

Upvotes: 15

V4Vendetta
V4Vendetta

Reputation: 38200

Well you can simply do as

string.Format("{0}:{1}", ts.Hours,ts.Minutes) // it would display 2:5

EDIT

to get it properly formatted use

string.Format("{0:00}:{1:00}", ts.Hours,ts.Minutes) // it should display 02:05

Upvotes: 28

Related Questions