I'm working on a C# application, where I'm doing some things and I want to display both the start, intermediate and end timestamps, and now I would like to add their time differences.
I figured it would be easy:
Console.WriteLine($"Start time: {DT_Start.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
Console.WriteLine($"Intermediate time: {DT_Intermediate.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
Console.WriteLine($"End time: {DT_End.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
This is working great. So I thought it would be equally easy to show the differences, so I started with:
Console.WriteLine($"Elapsed times: [{(DT_Intermediate - DT_Start).ToString("HH:mm:ss.fff")}] " +
$"and [{(DT_End - DT_Intermediate).ToString("HH:mm:ss.fff")}]");
I had dropped the year, month and day because everything is done in the same day. This did not work, so I decided to add those entries, but it still does not work:
Console.WriteLine($"Elapsed times: [{(DT_Intermediate - DT_Start).ToString("yyyy-MM-dd HH:mm:ss.fff")}] " +
$"and [{(DT_End - DT_Intermediate).ToString("yyyy-MM-dd HH:mm:ss.fff")}]");
So, in C#, you can show datetime objects and you can subtract them. The results, when debugging, are very similar but if you try to show that information in the same way, you get the error message System.FormatException: 'Input string was not in the correct format.'.
Is there a format I can use for both DateTime and TimeSpan objects? (I've seen that the difference between two DateTime objects would be a TimeSpan object)
As you have discovered yourself, the difference between two
DateTimeobjects is aTimeSpanwhich just represents the difference of time that has passed. Since a TimeSpan is not linked to a calendar date, you cannot format it using calendar specific things like months and years.However, your initial approach of only showing hours, minutes and seconds does work just fine. However, you will need to escape the colon and dot when wanting to use it in a TimeSpan format string. And also, the
HHfor the hours in the DateTime is written as lower-casehhfor TimeSpan:So in your example, this should work:
Note that the
TimeSpanalso supports days as part of the difference, so if the number of hours in your difference surpasses24, you will be missing this difference until you also include the number of days using the format specifierdin your result.You can read more about formatting
TimeSpanin the documentation about custom format strings.