【问题标题】:Swift: convert NSDate to c# ticksSwift:将 NSDate 转换为 c# 刻度
【发布时间】:2016-04-14 10:25:51
【问题描述】:

我需要将 NSDate 转换为 C# 记号。

DateTime.ticks 将日期转换为从 0001 年 1 月 1 日开始的刻度。

我该怎么做? 提前致谢。

【问题讨论】:

  • timeIntervalSinceReferenceDate 返回日期对象与 2001 年 1 月 1 日 00:00:00 UTC 之间的时间间隔。(只读)
  • 您的问题真的模糊不清。你能具体一点吗? minimal reproducible example 会很好..

标签: c# ios xcode swift datetime


【解决方案1】:

我在某处借用了这段代码,所以我不是作者。就是这样:

   @implementation NSDate (Ticks)

    - (long long) ticks
    {
        double tickFactor = 10000000;
        long long tickValue = (long long)floor([self timeIntervalSince1970] * tickFactor) + 621355968000000000LL;
        return tickValue;
    }

    + (NSDate*) dateWithTicks:(long long)ticks
    {
        double tickFactor = 10000000;
        double seconds = (ticks - 621355968000000000LL) / tickFactor;
        return [NSDate dateWithTimeIntervalSince1970:seconds];
    }

    @end

【讨论】:

    【解决方案2】:

    OP 用 Swift 标记了他的问题,所以这里有一个替代答案,尽管它与 Nikolay 发布的基本相同。但是,此版本增加了对 DateTime.MinValue 和 DateTime.MaxValue 与 Date.distantPast 和 Date.distantFuture 之间的映射支持。

       private static let CTicksAt1970 : Int64 = 621_355_968_000_000_000
       private static let CTicksPerSecond : Double = 10_000_000
    
       private static let CTicksMinValue : Int64 = 0
       private static let CTicksMaxValue : Int64 = 3_155_378_975_999_999_999
    
    
           // Method to create a Swift Date struct to reflect the instant in time specified by a "ticks" 
           // value, as used in .Net DateTime structs.
           internal static func swiftDateFromDotNetTicks(_ dotNetTicks : Int64) -> Date {
    
              if dotNetTicks == CTicksMinValue {
                 return Date.distantPast
              }
    
              if dotNetTicks == CTicksMaxValue {
                 return Date.distantFuture
              }
    
              let dateSeconds = Double(dotNetTicks - CTicksAt1970) / CTicksPerSecond
              return Date(timeIntervalSince1970: dateSeconds)
           }
    
    
           // Method to "convert" a Swift Date struct to the corresponding "ticks" value, as used in .Net 
           // DateTime structs.
           internal static func dotNetTicksFromSwiftDate(_ swiftDate : Date) -> Int64 {
    
              if swiftDate == Date.distantPast {
                 return CTicksMinValue
              }
    
              if swiftDate == Date.distantFuture {
                 return CTicksMaxValue
              }
    
              let dateSeconds = Double(swiftDate.timeIntervalSince1970)
              let ticksSince1970 = Int64(round(dateSeconds * CTicksPerSecond))
              return CTicksAt1970 + ticksSince1970
           }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      相关资源
      最近更新 更多