时间跨度到日期时间的转换

我想将时间跨度转换为日期时间。如何做到这一点?

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

DateTime dt;
TimeSpan ts="XXX";


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


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

还有别的办法吗?

225242 次浏览

将 TimeSpan 转换为 DateTime 不太符合逻辑。试着理解 Leppie 上面说的话。时间跨度是一个持续时间说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;

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

一个例子 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);

虽然所选择的答案是完全正确的,但我相信我理解 OP 试图在这里得到什么,因为我有一个类似的问题。

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

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

以上所有操作的一个问题是,转换将返回 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
}

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

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

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

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

但是如前所述,如果没有有效的开始日期,它就不是严格的逻辑 一个用例,我只需要时间方面。将工作良好,只要逻辑是正确的。

一个简单的方法,使用扁虱:

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

这个函数会给你一个日期(没有日期/月份/年份)

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

从表1中选择 CONVERT (datetime,myTimeField)作为 myTimeField

对我有用。

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

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