Swift:将NSDate转换为c#的ticks

我需要将NSDate转换为C#滴答。

DateTime.ticks将date转换为从0001年1月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 

OP用Swift标记了他的问题,所以这里有一个可供select的答案,尽pipe它与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 }