时间跨度到日期时间转换
本文关键字:转换 时间 日期 时间跨度 | 更新日期: 2023-09-27 18:31:54
我想将时间跨度转换为日期时间。我该怎么做?
我在谷歌上找到了一种方法:
DateTime dt;
TimeSpan ts="XXX";
//We can covnert 'ts' to 'dt' like this:
dt= Convert.ToDateTime(ts.ToString());
还有其他方法可以做到这一点吗?
将TimeSpan转换为DateTime不是很合乎逻辑。试着理解小皮上面说的话。时间跨度是一个持续时间,比如 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;
虽然所选答案是严格正确的,但我相信我理解 OP 在这里试图得到什么,因为我遇到了类似的问题。
我有一个 TimeSpan,我希望在网格控件中显示(只是 hh:mm),但网格似乎不理解 TimeSpan,只有 DateTime 。 OP 有一个类似的场景,其中只有 TimeSpan 是相关部分,但没有考虑添加 DateTime 参考点的必要性。
因此,如上所述,我只是添加了 DateTime.MinValue(尽管任何日期都可以),当网格将时间跨度呈现为结果日期的时间部分时,它随后会被网格忽略。
TimeSpan添加到新的DateTime来实现此目的。
TimeSpan ts="XXX";
DateTime dt = new DateTime() + 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);
我工作。
var StartTime = new DateTime(item.StartTime.Ticks);
如果您只需要在数据网格中显示时间值或标签类似,最好的方法是直接在日期时间数据类型中转换时间。
选择转换(日期时间,我的时间字段)作为我的时间字段从表1
您也可以使用 DateTime.FromFileTime(finishTime),其中 finishTme 是一个包含时间刻度的长整型。或来自文件时间Utc。
一个简单的方法,使用刻度:
new DateTime((DateTime.Now - DateTime.Now.AddHours(-1.55)).Ticks).ToString("HH:mm:ss:fff")
此功能将为您提供日期(无日/月/年)
上述所有问题在于转换返回的时间跨度中指定的错误天数。
使用上述方法,下面的返回 3 而不是 2。
关于如何在 TimeSpan 参数中保留 2 天并将其作为日期时间日返回的想法?
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
}
首先,将时间跨度转换为字符串,然后转换为日期时间,然后转换回字符串:
Convert.ToDateTime(timespan.SelectedTime.ToString()).ToShortTimeString();