繁体   English   中英

将TimeSpan小时转换为DateTime

[英]Converting TimeSpan Hours to DateTime

如下所示,由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
    }

谢谢-格伦

尝试时返回“ 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

因此,您在此处使用的是DateTime对象的格式“ dd”,而DateTime "dd"表示“月份中的日期”。

因此,您将日期设为2012-01-01,并添加了2天(和一点点)使其成为2012-01-03,然后您从月份中的第1天开始做了一个字符串,当然是3

问题解释!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM