80

我想将时间跨度转换为日期时间。我怎样才能做到这一点?

我在谷歌上找到了一种方法:

DateTime dt;
TimeSpan ts="XXX";

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

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

有没有其他方法可以做到这一点?

4

10 回答 10

116

将 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;
于 2012-04-23T07:17:32.857 回答
34

虽然选择的答案是严格正确的,但我相信我理解 OP 试图在这里得到什么,因为我遇到了类似的问题。

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

因此,如上所述,我只是添加了 DateTime.MinValue(尽管任何日期都可以),当它将时间跨度呈现为结果日期的时间部分时,网格随后会忽略它。

于 2013-03-06T02:05:50.800 回答
18

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

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

但如前所述,没有有效的开始日期是不符合逻辑的。我遇到了一个只需要时间方面的用例。只要逻辑正确就可以正常工作。

于 2014-10-23T11:58:55.077 回答
10

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

来自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);  
于 2012-04-23T07:26:12.730 回答
9

为我工作。

var StartTime = new DateTime(item.StartTime.Ticks);
于 2017-11-13T05:27:48.157 回答
0

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

SELECT CONVERT(datetime,myTimeField) as myTimeField FROM Table1

于 2017-04-24T14:48:31.933 回答
0

您还可以使用 DateTime.FromFileTime(finishTime) 其中 finishTme 是一个包含时间刻度的长整数。或 FromFileTimeUtc。

于 2018-07-24T04:57:50.887 回答
-2

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

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

这个功能会给你一个日期(没有日/月/年)

于 2015-02-04T21:16:51.343 回答
-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
}
于 2013-06-09T18:01:48.210 回答
-4

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

Convert.ToDateTime(timespan.SelectedTime.ToString()).ToShortTimeString();
于 2014-07-17T23:06:19.743 回答