TimeSpan到DateTime的转换

时间:2012-04-23 07:10:13

标签: c# datetime timespan

我想将Timespan转换为Datetime。我怎么能这样做?

我在Google上找到了一种方法:

DateTime dt;
TimeSpan ts="XXX";

//We can covnert 'ts' to 'dt' like this:

dt= Convert.ToDateTime(ts.ToString());

还有其他办法吗?

10 个答案:

答案 0 :(得分:85)

将TimeSpan转换为DateTime是不合逻辑的。试着理解leppie上面说的是什么。 TimeSpan持续时间为6天5小时40分钟。这不是日期。如果我说6天;你能从中推断一个日期吗?除非您有参考日期,否则答案是否定的。

因此,如果您想将TimeSpan转换为DateTime,您需要一个参考日期。 6天&从什么时候起5小时?所以你可以这样写:

 DateTime dt = new DateTime(2012, 01, 01);
 TimeSpan ts = new TimeSpan(1, 0, 0, 0, 0);
 dt = dt + ts;

答案 1 :(得分:30)

虽然选择的答案是完全正确的,但我相信我理解OP在这里遇到的问题,因为我遇到了类似的问题。

我有一个TimeSpan,我希望在网格控件中显示(就像hh:mm),但网格似乎不理解TimeSpan,只有DateTime。 OP有类似的情况,其中只有TimeSpan是相关部分,但没有考虑添加DateTime参考点的必要性。

因此,如上所述,我只是添加了DateTime.MinValue(尽管会有任何日期),当网格将时间跨度作为结果日期的时间部分时,网格会忽略该网格。

答案 2 :(得分:11)

可以将TimeSpan添加到新的DateTime中以实现此目的。

TimeSpan ts="XXX";
DateTime dt = new DateTime() + ts;

但如前所述,没有有效的开始日期,它并不严格合乎逻辑。我遇到过 一个用例,我只需要时间方面。只要逻辑正确,它就能正常工作。

答案 3 :(得分:8)

您需要一个参考日期才能有用。

来自的一个例子     http://msdn.microsoft.com/en-us/library/system.datetime.add.aspx

// Calculate what day of the week is 36 days from this instant.  
System.DateTime today = System.DateTime.Now;  
System.TimeSpan duration = new System.TimeSpan(36, 0, 0, 0);  
System.DateTime answer = today.Add(duration);  
System.Console.WriteLine("{0:dddd}", answer);  

答案 4 :(得分:0)

如果您只需要在数据网格或类似标签中显示时间值,最好的方法是直接在datetime数据类型中转换时间。

SELECT CONVERT(datetime,myTimeField)as myTimeField FROM Table1

答案 5 :(得分:0)

var StartTime = new DateTime(item.StartTime.Ticks);

答案 6 :(得分:0)

您还可以使用DateTime.FromFileTime(finishTime),其中finishTme是一个很长的时间,包含一个时间间隔。或FromFileTimeUtc。

答案 7 :(得分:-3)

上述所有问题都是转换返回TimeSpan中指定的错误天数 使用上面的代码,下面返回3而不是2.

关于如何在TimeSpan参数中保留2天并将其作为DateTime日返回的想法?

public void should_return_totaldays()
{
    _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
}

答案 8 :(得分:-3)

一种简单的方法,使用刻度:

new DateTime((DateTime.Now - DateTime.Now.AddHours(-1.55)).Ticks).ToString("HH:mm:ss:fff")

此功能将为您提供日期(无日/月/年)

答案 9 :(得分:-4)

首先,将时间跨度转换为字符串,然后转换为DateTime,然后再转换回字符串:

Convert.ToDateTime(timespan.SelectedTime.ToString()).ToShortTimeString();