Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1064
  • Last Modified:

Formatting TimeSpan in C#

How can I format a Date Difference in C# using timespan.subtract

Here is what I have so far, I need it to return in hh:mi format

If there is an easier way to do it other than timespan im open to it.  I just have to return this to the user in an hh:mi format.  Even (negative times) -hh:mi if the time returned is negative.

Thanks
DateTime startTime = new DateTime(); 
 DateTime endTime = new DateTime();
 TimeSpan conflictDuration = new TimeSpan();

startTime = 03/28/2011 11:45;
endTime =   03/28/2011 1:47;

conflictDuration = endTime.Subtract(startTime);

Open in new window

0
jmpatton
Asked:
jmpatton
  • 6
  • 5
1 Solution
 
p_davisCommented:
string formatted = endTime.Subtract(startTime).ToString("hh:mm");
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Unfortunately the TimeSpan() class doesn't accept a format in ToString() so you have to manually extract the values and put them together yourself.  =\

Here's one way:
conflictDuration = endTime.Subtract(startTime);
string formatted = (conflictDuration.TotalMilliseconds < 0 ? "-" : "") + Math.Abs(conflictDuration.Hours).ToString("00") + ":" + Math.Abs(conflictDuration.Minutes).ToString("00");
MessageBox.Show(formatted);

Open in new window

0
 
p_davisCommented:
poo, i don't know what the heck i was thinking.
0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
Mike TomlinsonMiddle School Assistant TeacherCommented:
I've often wondered why they didn't implement a ToString() overload that accepts a format for the TimeSpan...it would make perfect sense to me!  =)
0
 
p_davisCommented:
it would be hard for a span that was more than a day, i guess?
0
 
wdosanjosCommented:
BTW, TimeSpan.ToString(format) is available in .NET 4:

    http://msdn.microsoft.com/en-us/library/dd992632.aspx

So, p_davis' answer is correct as long as it's .NET 4.

I hope this helps.
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Woohoo!  Thanks for update wdosanjos.  =)

You have to escape the ":" though like this:
Dim dtA As DateTime = DateTime.Now
        Dim dtB As DateTime = dtA.AddDays(Math.PI)
        Dim ts As TimeSpan = dtB.Subtract(dtA)
        Label1.Text = ts.ToString("dd\:hh\:mm\:ss")

Open in new window


*This is different than the DateTime.ToString() method which is perfectly happy accepting an un-escaped colon!
0
 
p_davisCommented:
what is this dim you speak of??? ;p
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Hahaha...grrrr....I'm always forgetting what ZONE I'm in!  =)

In not as beautiful as VB.Net, the C# equivalent would be:   *wink*
private void button1_Click(object sender, EventArgs e)
        {
            DateTime dtA = DateTime.Now;
            DateTime dtB = dtA.AddDays(Math.PI);
            TimeSpan ts = dtB.Subtract(dtA);
            label1.Text = ts.ToString(@"dd\:hh\:mm\:ss");
        }

Open in new window

0
 
p_davisCommented:
well defined space of a function embraced by beautiful curly brackets.....all is right with the world
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
// no comment;
0
 
p_davisCommented:

code puns =)

don't hate!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 6
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now