2012-09-14 5 views
4

J'utilise NSDate pour mesurer l'exécution du programme. Je crée instance de NSDate au début puis à la fin créer nouvelle instance endDate et appelle:iPhone: NSDate et DST

[startDate timeIntervalSinceDate: endDate] 

Cela fonctionne très bien, mais je suis intéressé ce qui se passera si le programme commence à exécuter avant le changement heure d'été, et se termine après. Est-ce que startDate sera perçu comme étant dans le futur, et la méthode timeInterval retournera une valeur négative?

+1

Comment obtenez-vous startDate et endDate? Avec [date NSDate]? – Darren

+0

Oui, j'appelle [date NSDate] – MegaManX

Répondre

0

Il semblerait que ce que Darren a impliqué est vrai. NSDate est une référence à un intervalle à partir d'une date de référence absolue, le 1er janvier 2001 00:00 GMT. Ainsi, la méthode de classe [NSDate date] retournera une représentation de cet intervalle. Donc, la date ne sera pas perçue à l'avenir.

0

Ce n'est pas un problème lié à l'iPhone seulement. J'ai un lien qui parle de cela en termes de temps de serveur et de client. La seule solution de contournement pour ce problème consiste à sélectionner un fuseau horaire pour le serveur d'applications Maximo et le client d'interface graphique qui n'utilise pas l'heure d'été.

Reference

Hope this efface le doute

2

Je crois que NSDates sont des points absolus dans le temps, et non effectuées par le temps de l'heure d'été ou les fuseaux horaires. Par exemple, à l'heure actuelle, c'est exactement le même moment à New York et à Pékin, même si, en raison des fuseaux horaires, il peut être 10 heures à New York et 22 heures à Beijing. Une minute après le passage de DST à ST sera une minute plus tard, même si votre horloge pourrait lire 59 minutes plus tôt. Donc, je pense que si vous générez vos dates en utilisant [date NSDate], vous aurez toujours l'intervalle de temps correct.

Vous pouvez le tester en réglant la date de votre appareil juste avant le passage à l'heure d'été (DST) et en enregistrant l'intervalle en utilisant une date de début avant le commutateur et une date de fin après le commutateur.