2016-04-14 1 views
0

NSDateをC#ティックに変換する必要があります。Swift:NSDateをC#ティックに変換する

DateTime.ticksは、私はそれを行うことができますどのように0001

1月1日から始まるティックに日付を変換しますか? ありがとうございます。

+0

'timeIntervalSinceReferenceDate'は、1月1日、2001年の日付オブジェクトと00:00:00の間の間隔を返します(読み取り専用) – zcui93

+0

あなたの質問は_really_ vaugeと不明です。 **もっと**具体的になりますか? [mcve]はいいです.. –

答えて

2

私はこのコードをどこかで借りたので、私は著者ではありません。ので、ここで、

@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 
1

OPはスウィフトと彼の質問をタグ付けニコライが掲載しているとして、それは基本的に同じであるが、代替の答えだ:ここにそれが行きます。ただし、このバージョンでは、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 
     } 
関連する問題