【问题标题】:Convert Ticks to TimeSpan将刻度转换为时间跨度
【发布时间】:2017-05-31 08:34:06
【问题描述】:

我想将 Ticks 转换为 TimeSpan。

我需要一个ConvertToTimeSpan 函数,如下所示。

var ticks = 10000;
TimeSpan ts = ConvertToTimeSpan(ticks);  // not working
Console.WriteLine(ts);  // expected output --> {00:00:00.0010000}

【问题讨论】:

    标签: c# type-conversion timespan date-manipulation


    【解决方案1】:

    有一个TimeSpan(Int64) 构造函数,它接受多个刻度:

    https://msdn.microsoft.com/en-us/library/zz841zbz(v=vs.110).aspx

    将 TimeSpan 结构的新实例初始化为指定的刻度数。

    在 .NET 中,Ticks 始终表示为 Int64,因此您不应使用 var ticks = 1,因为这是一个隐含的 Int32,因此您最终会使用错误的方法重载。而是指定显式类型声明或长文本值 (var ticks = 1L)。

    【讨论】:

    • 只有一个重载接受一个参数,取一个long,它会从int隐式转换,所以他在这个特殊情况下使用var并不重要.
    • 作为替代方案,您可以将变量定义为 var ticks = 10000L 以使编译器知道您希望该数字为 long。
    【解决方案2】:

    您需要 .NET Framework 中已经存在的 TimeSpan.FromTicks(Int64) 方法。

    此方法使用其他答案中建议的时间跨度 constructor。如果你想深入挖掘,可以在reference source code 中验证。

    【讨论】:

      【解决方案3】:

      你还没有告诉ConvertToTimeSpan方法里面发生了什么,反正不需要额外的方法来实现,你可以使用TimeSpan类的构造函数来完成这项工作。看看这个Example 并尝试使用以下代码:

      var ticks = 1;
      TimeSpan ts = new TimeSpan(ticks);  
      Console.WriteLine(ts); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-30
        • 2019-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多