将DateTime转换为TimeSpan


73

我想将一个DateTime实例转换为一个TimeSpan实例,可以吗?

我环顾四周,但找不到所需的东西,只发现时差。更具体地说,我想将一个DateTime实例转换为毫秒,然后将其保存到IsolatedStorage中。

Answers:


18

要将a转换DateTime为a,TimeSpan您应该选择一个基准日期/时间-例如2000年1月1日午夜,然后从您的DateTime值中减去它(并在要转换回时将其添加DateTime)。

如果仅要将a转换DateTime为数字,则可以使用该Ticks属性。


209

您可以只使用日期时间的TimeOfDay属性,该属性是TimeSpan类型:

DateTime.TimeOfDay

自.NET 1.1起就存在此属性

详细信息:http : //msdn.microsoft.com/zh-cn/library/system.datetime.timeofday(v=vs.110).aspx


4
DateTime.Now.TimeOfDay || DateTime.Today.TimeOfDay
espaciomore

4
要非常痛苦且过于清晰,您可以使用DateTime myDateTime = DateTime.UtcNow;或使用东西将其放入的特定实例DateTime,然后可以使用myDateTime.TimeOfDay;。或者,您可以切掉中间人并说“ DateTime.UtcNow.TimeOfDaynatch”。(也就是说,DateTime.TimeOfDay当前示例代码是“无效的”,并且不会像DateTime.UtcNow以前那样为您提供值,这在一定程度上是有意义的。您需要使用特定的方法DateTime来获取其TimeOfDay值。)
ruffin

3
请注意。使用此属性将为您提供(我引用MSDN)“一个时间间隔,该时间间隔表示自午夜以来经过的一天的一部分。” 有时您可能只关心当天。其他时候,您可能希望获得一个“绝对”时间(例如,如果您的值跨越数天或数周),在这种情况下,@ MiMo建议选择一个基准是合适的。
古斯塔沃·莫里

1
DateTime.TimeOfDay.ToString(“ hh \\:mm”)可以很好地格式化。
JsonStatham


8

试试下面的代码。

 TimeSpan CurrentTime = DateTime.Now.TimeOfDay;

获取一天中的时间并将其分配给TimeSpan变量。


4

如果您使用WPF和Xceed的TimePicker(似乎正在使用DateTime?)作为时间选择器(如我现在所做的那样),您可以像这样获取总毫秒数(或TimeSpan):

var milliseconds = DateTimeToTimeSpan(timePicker.Value).TotalMilliseconds;

    TimeSpan DateTimeToTimeSpan(DateTime? ts)
    {
        if (!ts.HasValue) return TimeSpan.Zero;
        else return new TimeSpan(0, ts.Value.Hour, ts.Value.Minute, ts.Value.Second, ts.Value.Millisecond);
    }

XAML:

<Xceed:TimePicker x:Name="timePicker" Format="Custom" FormatString="H'h 'm'm 's's'" />

如果不是这样,我想您可以调整我的DateTimeToTimeSpan(),使其也考虑到“天数”或类似的行为dateTime.Substract(DateTime.MinValue).TotalMilliseconds

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.