将TimeSpan小时转换为DateTime

时间:2013-06-09 18:22:51

标签: c# datetime .net-3.5 converter timespan

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
    }

谢谢 - 格伦

1 个答案:

答案 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

问题解释了!