Arif Eqbal发布的评论代码下面将TimeSpan转换为DateTime
上述问题是转换返回TimeSpan中指定的错误天数。使用上面的内容,下面按指定返回3而不是2。分钟和秒都保留。 ~~关于如何在TimeSpan参数中保留2天并将它们作为DateTime日返回的想法?
此转换的第二个问题是,如果我想将时间以天为单位添加到TimeSpan中的小时数并将其作为DateTime小时返回,例如Format =“hh:mm”或49:30,无法在DateTime对象中一起添加小时数。基本上我想将TimeSpan.TotalHours转换为DateTime对象的Hours组件。我知道这可能需要字符串转换,但在.Net 3.5中似乎没有一个优雅的解决方案。不幸的是,我没有4.0或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
}
谢谢 - 格伦
答案 0 :(得分:1)
我尝试时返回“02”。
“dd”格式会在必要时将其置为前导零,但您未能在Is.EqualTo("2")
因此你的断言失败了(但你错误地认为它正在返回3)。
我通过将您的代码复制/粘贴到控制台应用中来测试:
var _ts = new TimeSpan(2, 1, 30, 10);
var format = "dd";
var returnedVal = _ts.ToString(format);
Console.WriteLine(returnedVal); // Prints "02"
[编辑]啊哈!现在我知道你做了什么。您的代码实际上是这样的:
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);
但请注意conversionResult
的类型是DateTime
,不是 TimeSpan
。
所以你在这里使用的格式是“dd”和DateTime
对象,而"dd"
表示日期时间是指“每月的某一天”。
所以你把2012-01-01的日期和它添加了2天(和一点点)来使它成为2012-01-03,然后你在月份的那一天制作了一个字符串,其中一个当然是3
。
问题解释了!