Reputation: 135
Commented Code As Posted by Arif Eqbal the below Converts a TimeSpan to a DateTime
A problem with the above is that the conversion returns the incorrect number of days as specified in the TimeSpan. Using the above, the below returns 3 and not 2 as specified. The minutes and seconds are preserved. ~~ Ideas on how to preserve the 2 days in the TimeSpan arguments and return them as the DateTime day?
A second problem of this conversion is that if I want to add the hours in days to the hours in the TimeSpan and return them as DateTime hours, e.g. Format = "hh:mm" or 49:30, there is no way to add the hours together in a DateTime object. Essentially I want to convert TimeSpan.TotalHours to the Hours component of the DateTime object. I understand this likely requires a string conversion, but there doesn't seem to be an elegant solution in .Net 3.5. Unfortunately I do not have the luxury of the converters from 4.0 or 4.5.
public void test()
{
// Arif Eqbal
//DateTime dt = new DateTime(2012, 01, 01);
//TimeSpan ts = new TimeSpan(1, 0, 0, 0, 0);
//dt = dt + ts;
_ts = new TimeSpan(2, 1, 30, 10);`
var format = "dd";
var returnedVal = _ts.ToString(format);
Assert.That(returnedVal, Is.EqualTo("2")); //returns 3 not 2
}
Thanks - Glenn
Upvotes: 0
Views: 443
Reputation: 109792
It returns "02" when I try it.
The "dd" format makes it put leading zeroes if necessary, but you have failed to account for this in your Is.EqualTo("2")
Therefore your assertion fails (but you mistakenly thought that it was returning 3).
I tested this by copy/pasting your code into a Console app:
var _ts = new TimeSpan(2, 1, 30, 10);
var format = "dd";
var returnedVal = _ts.ToString(format);
Console.WriteLine(returnedVal); // Prints "02"
[EDIT] Aha! Now I know what you've done. Your code is actually like this:
var _ts = new TimeSpan(2, 1, 30, 10);
var format = "dd";
DateTime formatDateTime = new DateTime(2012, 01, 01);
var conversionResult = formatDateTime + _ts;
string result = conversionResult.ToString(format);
But note what the type of conversionResult
is DateTime
, not TimeSpan
.
So you're doing here is using the format "dd" with a DateTime
object, and "dd"
for a DateTime means "The day of the month".
So you took the date 2012-01-01 and added 2 days (and a bit) to it to make it 2012-01-03, and then you made a string out of the day of the month part, which of course is 3
.
Problem explained!
Upvotes: 1