TimeSpan到DateTime的转换

Rag*_*v55 58 c# datetime timespan

我想将Timespan转换为Datetime.我怎样才能做到这一点?

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

DateTime dt;
TimeSpan ts="XXX";

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

dt= Convert.ToDateTime(ts.ToString());
Run Code Online (Sandbox Code Playgroud)

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

Ari*_*bal 90

将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;
Run Code Online (Sandbox Code Playgroud)

  • 你的答案是正确的,我感谢你......但是将TimeSpan转换为DateTime _can_是一个合乎逻辑的,有意义的事情.例如,实体框架将TSQL时间类型(即时间)映射到TimeSpan,作为自午夜以来的持续时间.要格式化值,我希望它作为DateTime,所以我可以使用其中一个排除日期部分的格式化方法...也许EF应该使用DateTime,但我认为将TimeSpan视为自午夜以来的持续时间至少有些合理.除了我不能改变EF的行为. (4认同)

Mik*_*ike 30

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

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

因此,如上所述,我只是添加了DateTime.MinValue(虽然任何日期都会这样做),当网格将时间跨度作为结果日期的时间部分时,网格随后会忽略它.


小智 12

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

TimeSpan ts="XXX";
DateTime dt = new DateTime() + ts;
Run Code Online (Sandbox Code Playgroud)

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


小智 9

您需要一个参考日期才能使用它.

来自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);  
Run Code Online (Sandbox Code Playgroud)


Aru*_*E S 7

var StartTime = new DateTime(item.StartTime.Ticks);
Run Code Online (Sandbox Code Playgroud)