web-dev-qa-db-fra.com

timeIntervalSinceReferenceDate vs timeIntervalSince1970 vs timeIntervalSinceNow

J'essaie d'étudier la classe NSDate dans Swift 2.

J'ai constaté que chaque objet NSDate possède trois propriétés, à savoir:

  1. timeIntervalSinceReferenceDate
  2. timeIntervalSince1970
  3. timeIntervalSinceNow

Un peu déroutant pour moi. Je ne pouvais pas comprendre leur interprétation bien que je sache qu'ils représentent les secondes.

J'ai fait ce code:

let whatISThis = NSDate(timeIntervalSinceReferenceDate: NSTimeInterval(60))

D'accord, j'ai un rendez-vous, mais qu'est-ce que c'est? Quelle est la différence entre ces trois propriétés?

8
user2228656

timeIntervalSinceReferenceDate est le nombre de secondes écoulées depuis le 1er janvier 2001: 00h00 (minuit)

timeIntervalSince1970 est le nombre de secondes écoulées depuis le 1er janvier 1970 à minuit.

timeIntervalSinceNow est le nombre de secondes depuis maintenant

Je vais énumérer ces exemples:

let s0 = NSDate(timeIntervalSinceReferenceDate: NSTimeInterval(0)) // it means give me the time that happens after January,1st, 2001, 12:00 am by zero seconds
print("\(s0)") //2001-01-01 00:00:00

let s60 = NSDate(timeIntervalSinceReferenceDate: NSTimeInterval(60)) //it means give me the time that happens after January, 1st, 2001, 12:00 am by **60 seconds**
print("\(s60)") //2001-01-01 00:01:00

let s2 = NSDate(timeIntervalSince1970: NSTimeInterval(0)) // it means give me the time that happens after January, 1st, 1970 12:00 am by **zero** seconds
print("\(s2)") //1970-01-01 00:00:00

let s3 = NSDate() // it means the current time
print("\(s3)")//2015-10-25 14:12:40

let s4 = NSDate(timeIntervalSinceNow: NSTimeInterval(60)) //it means one minute (60 seconds) after the current time
print("\(s4)") //2015-10-25 14:13:40

let s5 = NSDate(timeIntervalSinceNow: NSTimeInterval(-60)) // it means one minute (60 seconds) before the current time
print("\(s5)") //2015-10-25 14:11:40

let sd = NSDate(timeIntervalSinceReferenceDate: NSTimeInterval(60)) // it means one minute after the reference time (January, 1st, 1970: 12:00 am)
print("\(sd)") //2001-01-01 00:01:00

Et bien sûr, si vous avez un objet NSDate, vous pouvez prendre toutes ces propriétés simplement ...

let sNow = NSDate()
sNow.timeIntervalSinceReferenceDate
sNow.timeIntervalSinceNow
sNow.timeIntervalSince1970
28
William Kinaan

William a bien expliqué la différence entre les initialiseurs. (Voté)

NSDate a également des propriétés qui vous permettent de demander une date pour vous donner des intervalles de temps. Je vais en parler dans une minute.

Tout d’abord un peu d’arrière-plan: les méthodes timeIntervalSince1970 et timeIntervalSinceReferenceDate utilisent une "date d’époque" différente, ou une date considérée comme la "date zéro" (la date avec une valeur numérique de zéro).

timeIntervalSince1970 utilise la date Epoch qui est la norme dans UNIX: minuit le 1er janvier 1970 à GMT. C'est également la date standard pour les dates sur Internet.

timeIntervalSinceReferenceDate utilise Mac OS/iOS Epoque. Le 1er janvier 2001 à minuit. Vous pouvez facilement calculer un décalage constant entre ces 2 dates de référence et effectuer des conversions entre elles à l'aide de l'addition/soustraction.

En plus des méthodes init dont vous avez parlé, NSDate possède des propriétés qui vous donnent une valeur correspondant au nombre de secondes depuis une date de référence donnée:

var timeIntervalSinceReferenceDate: NSTimeInterval
var timeIntervalSince1970: NSTimeInterval

C'est déroutant car les noms des propriétés et des noms des méthodes init semblent identiques dans Swift. Les méthodes init sont nommées un peu plus clairement dans Objective-C:

+ (instancetype _Nonnull)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)seconds

+ (instancetype _Nonnull)dateWithTimeIntervalSince1970:(NSTimeInterval)seconds

En général, je trouve que le nom des méthodes de Swift est plus propre que celui d'Objective-C, mais les méthodes init peuvent être une exception.

6
Duncan C

Vous pouvez trouver des intervalles de temps entre les objets de date avec
- timeIntervalSinceDate:

Ces trois propriétés sont des raccourcis permettant de trouver la même chose avec un autre objet de date.

  1. timeIntervalSince1970— 1er janvier 1970 à 12 heures GMT.
  2. timeIntervalSinceReferenceDate - 1er janvier 2001 à 12h00 GMT.
  3. timeIntervalSinceNow - date et heure actuelles. 
0
nRewik