将DateTime转换为TimeSpan

Ayo*_*b.A 65 .net c#

我想将DateTime实例转换为TimeSpan实例,是否可能?

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

小智 188

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

DateTime.TimeOfDay
Run Code Online (Sandbox Code Playgroud)

此属性自.NET 1.1以来一直存在

更多信息:http://msdn.microsoft.com/en-us/library/system.datetime.timeofday(v=vs.110).aspx

  • 为了痛苦和过于清晰,你可以使用`DateTime myDateTime = DateTime.UtcNow;`或者其他任何东西进入*DateTime**的*特定实例,然后你可以使用**`myDateTime.TimeOfDay;`**.或者,你可以删除中间人并说,**`DateTime.UtcNow.TimeOfDay`**,natch.(也就是说,`DateTime.TimeOfDay`,当前的示例代码,是"无效的"并且不会像`DateTime.UtcNow`那样给你一个值,这是有道理的.你需要一个特定的`DateTime`来抓住它的'TimeOfDay`值.) (4认同)
  • 这是一个更好的答案,谢谢. (3认同)
  • DateTime.Now.TimeOfDay || DateTime.Today.TimeOfDay (3认同)
  • 提醒一句.使用此属性将为您提供一个"时间间隔,该时间间隔代表自午夜以来经过的一天中的一小部分".有时你关心的只是当天.其他时候,您可能希望获得"绝对"时间(例如,如果您的值跨越几天或几周),在这种情况下@ MiMo建议选择基数是合适的. (3认同)

Koa*_*ear 18

TimeSpan.FromTicks(DateTime.Now.Ticks)
Run Code Online (Sandbox Code Playgroud)

  • 那要看.`TimeOfDay`只是时间,不包括`TimeSpan`中的当前日期. (13认同)
  • DateTime.TimeOfDay更好 (3认同)

MiM*_*iMo 15

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

如果您只想将a转换DateTime为数字,则可以使用该Ticks属性.


Muh*_*ais 6

请尝试以下代码。

 TimeSpan CurrentTime = DateTime.Now.TimeOfDay;
Run Code Online (Sandbox Code Playgroud)

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


NoO*_*One 5

如果您使用 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);
    }
Run Code Online (Sandbox Code Playgroud)

XAML:

<Xceed:TimePicker x:Name="timePicker" Format="Custom" FormatString="H'h 'm'm 's's'" />
Run Code Online (Sandbox Code Playgroud)

如果没有,我想你可以调整我的 DateTimeToTimeSpan() ,以便它也考虑“天”或做类似的事情dateTime.Substract(DateTime.MinValue).TotalMilliseconds