TimeSpan到DateTime的转换
我想将时间跨度转换为date时间。 我怎样才能做到这一点?
我在Google上find了一种方法:
DateTime dt; TimeSpan ts="XXX"; //We can covnert 'ts' to 'dt' like this: dt= Convert.ToDateTime(ts.ToString());
有没有其他方法可以做到这一点?
将TimeSpan转换为DateTime并不合乎逻辑。 试着去了解一下上面说的那些嬉皮士。 TimeSpan的持续时间是6天5小时40分钟。 这不是date。 如果我说6天; 你能从中推导出一个date吗? 答案是否定的,除非你有一个参考date。
所以如果你想将TimeSpan转换为DateTime,你需要一个参考date。 6天5小时? 所以你可以写这样的东西:
DateTime dt = new DateTime(2012, 01, 01); TimeSpan ts = new TimeSpan(1, 0, 0, 0, 0); dt = dt + ts;
虽然所选的答案是严格正确的,但我相信我明白OP在尝试在这里得到什么,因为我有类似的问题。
我有一个TimeSpan,我希望显示在一个网格控件(只是hh:mm),但网格似乎并不理解TimeSpan,只有DateTime。 OP有类似的情况,只有TimeSpan是相关的部分,但没有考虑添加DateTime参考点的必要性。
所以,如上所述,我简单地添加了DateTime.MinValue(尽pipe任何date都会这样做),然后在将时间跨度呈现为结果date的时间部分时,网格随后被网格忽略。
你需要一个参考date,这是有用的。
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);
TimeSpan可以添加到新的DateTime来实现这一点。
TimeSpan ts="XXX"; DateTime dt = new DateTime() + ts;
但是如前所述,如果没有有效的开始date,这是不合逻辑的。 我遇到了一个只需要时间方面的用例。 只要逻辑正确,就能正常工作。
如果你只需要在datagrid中显示时间值或标签类似,最好的方法就是直接在datetime数据types中进行时间转换。
SELECT CONVERT(datetime,myTimeField)myTimeField FROM Table1
var StartTime = new DateTime(item.StartTime.Ticks);
一个简单的方法,使用蜱:
new DateTime((DateTime.Now - DateTime.Now.AddHours(-1.55)).Ticks).ToString("HH:mm:ss:fff")
这个function会给你一个date(没有日/月/年)
上述所有问题都是转换返回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 }
首先,将时间跨度转换为string,然后转换为DateTime,然后再转换为string:
Convert.ToDateTime(timespan.SelectedTime.ToString()).ToShortTimeString();