web-dev-qa-db-fra.com

Swift ios date en millisecondes Double ou UInt64?

Je ne suis pas développeur iOS mais j'ai commencé à apprendre Swift.

J'essaie de convertir une logique d'un projet Android vers iOS

J'ai méthode suivante:

func addGroupItemSample(sample : WmGroupItemSample){ // some custom class

    var seconds: NSTimeInterval = NSDate().timeIntervalSince1970
    var  cuttDate:Double =  seconds*1000;

    var sampleDate: UInt64 = sample.getStartDate(); // <-- problematic place

if(sampleDate > cuttDate){
   // ....
  }
}

De la méthode ci-dessus, vous pouvez voir que sample.getStartDate() renvoie le type UInt64

Je pensais que c'était comme long en Java: System.currentTimeMillis()

Mais l’heure actuelle en millisecondes est définie par Double.

Est-ce la bonne façon de mélanger Double et UInt64 ou ai-je besoin de représenter toutes les millisecondes sous la forme Double uniquement?

Merci,

16
snaggs

Swift ne permet pas de comparer différents types.

seconds est une valeur Double en virgule flottante exprimée en secondes avec une précision inférieure à la seconde.
sampleDate est un UInt64 mais les unités ne sont pas renseignées .sampleDate doit être converti en une valeur à virgule flottante Double avec des unités de secondes. 

var sampleDate: Double = Double(sample.getStartDate())

Ensuite, ils peuvent être comparés:

if(sampleDate > cuttDate){}
5
zaph

dans iOS, il est préférable d'utiliser double, mais vous pouvez essayer ceci:

func currentTimeMillis() -> Int64{
    let nowDouble = NSDate().timeIntervalSince1970
    return Int64(nowDouble*1000)
}
27
Ben

Voici une version alternative, pour Swift 3:

   /// Method to get Unix-style time (Java variant), i.e., time since 1970 in milliseconds. This 
   /// copied from here: http://stackoverflow.com/a/24655601/253938 and here:
   /// http://stackoverflow.com/a/7885923/253938
   /// (This should give good performance according to this: 
   ///  http://stackoverflow.com/a/12020300/253938 )
   ///
   /// Note that it is possible that multiple calls to this method and computing the difference may 
   /// occasionally give problematic results, like an apparently negative interval or a major jump 
   /// forward in time. This is because system time occasionally gets updated due to synchronization 
   /// with a time source on the network (maybe "leap second"), or user setting the clock.
   public static func currentTimeMillis() -> Int64 {
      var darwinTime : timeval = timeval(tv_sec: 0, tv_usec: 0)
      gettimeofday(&darwinTime, nil)
      return (Int64(darwinTime.tv_sec) * 1000) + Int64(darwinTime.tv_usec / 1000)
   }
3
RenniePet
func get_microtime() -> Int64{
    let nowDouble = NSDate().timeIntervalSince1970
    return Int64(nowDouble*1000)
}

Fonctionne bien

1
Softlabsindia