Convert TimeSpan from format “hh:mm:ss” to “hh:mm”

I want to show in a TextBox only hour and minutes

var test = dataRow.Field<TimeSpan>("fstart").ToString();  
//test ="08:00:00"  
var tb = (TextBox) gridViewRow.Cells[2].FindControl("fstart");
tb.Text = test;

how to show only hours and minutes "hh.mm"

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

You need to convert your data to TimeSpan and then use format:"hh:mm"

string test ="08:00:00";
TimeSpan ts = TimeSpan.Parse(test);
Console.Write(ts.ToString(@"hh:mm"));

In your case:

var test = dataRow.Field<TimeSpan>("fstart").ToString(@"hh:mm"));

Remember to escape the colon :

You may see: Custom TimeSpan Format Strings

Method 2

There is no need to convert from hh.mm.ss to hh.mm. TimeSpan is stored as a number of ticks (1 tick == 100 nanoseconds) and has no inherent format. What you have to do, is to convert the TimeSpan into a human readable string! This involves formatting. If you do not specify a format explicitly, a default format will be used. In this case hh.mm.ss.

string formatted = timespan.ToString(@"hh.mm");

Note: This overload of ToString exists since .NET 4.0. It does not support date and time placeholder separator symbols! Therefore you must include them as (escaped) string literals.

The usual way of formatting strings seems not to work for some odd reason (tested with .NET 3.5). (It does not make any difference whether you escape the separator symbol or not):

var timespan = TimeSpan.FromSeconds(1234);
string formatted = String.Format(@"{0:hh.mm}", timespan); // ==> 00:20:34

However, you can construct the string like this

string formatted =
    String.Format("{0:00}.{1:00}", Math.Floor(timespan.TotalHours), timespan.Minutes);

or starting with VS2015 / C# 6.0, using string interpolation:

string formatted = <a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="391d79">[email protected]</a>"{timespan:hh:mm}";

Method 3

You can use TimeSpan methods:

ToString("hh':'mm")
// or
ToString(@"hh:mm")

Also check all available formats here http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

Method 4

var test = dataRow.Field<TimeSpan>("fstart").ToString("hh.mm");  
//test ="08:00"  
var tb = (TextBox) gridViewRow.Cells[2].FindControl("fstart");
tb.Text = test;

Method 5

I know this is a very old question. If anyone wants to show single-digit hours when your hours are a single digit then you can use

var hoursWithMinutes = TimeSpan.FromHours(hours).ToString(@"h:mm")

This way, when your hours are double-digit I mean greater than 9 then it will be showing 10:00 something like that.

Method 6

The previous solutions don’t run if hours>24, try this solution if you have time in minutes very big

int minutes = 159000;
TimeSpan t = new TimeSpan(0, minutes, 0);

String HOURS = Math.Round(t.TotalHours, 0).ToString();
if (HOURS.Length==1)
{
    HOURS = "0"+HOURS;
}


String MINUTES = t.Minutes.ToString();
if (MINUTES.Length == 1)
{
    MINUTES = "0" + MINUTES;
}


String RESULT = HOURS + ":" + MINUTES;

Method 7

You can achieve this by:

  var hhmm = TimeSpan.FromMinutes(minutes).ToString(@"hh:mm")


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x