7
votes

Nsdate - compensation du fuseau horaire

Je dois manquer quelque chose de petite taille mais ne peut pas comprendre. Essayant de créer une date de comparaison, mais je ne peux pas sembler compenser la couranteDate de GMT à l'est: xxx pré>

merci! P>

EDIT: P>

J'appelle une méthode dans une classe distincte (essayant de faire ce portable) à l'aide de la ligne suivante: p> xxx pré>

dans la méthode d'expiration, j'ai ces lignes: p> xxx pré>

Je comparais ensuite ces deux valeurs comme: p> xxx pré>

Est-ce que cela aide? Merci pour votre patience! P>

EDIT: P>

Voici toute l'expiration: dans la méthode car elle se tient actuellement ... P>

[Session started at 2011-01-06 10:43:46 -0500.]
2011-01-06 10:43:48.146 TimeBasedDemo[14717:207] installDate:2011-01-06 15:43:48 +0000
2011-01-06 10:43:48.147 TimeBasedDemo[14717:207] expires:2011-01-07 17:00:00 +0000
2011-01-06 10:43:48.147 TimeBasedDemo[14717:207] currentDate:2011-01-06 15:43:48 +0000


5 commentaires

Pouvez-vous être plus précis sur ce que vous voulez réellement faire?


J'essaie de comparer la date / heure actuelle contre une date / heure fournie pour les applications de démonstration limitée. La partie qui me donne que HatSle fait la comparaison dans mon fuseau horaire (EST) plutôt que GMT. Plus facile d'utiliser mon propre fuseau horaire que convertir en GMT lorsque j'appelle la méthode contenant.


Ce code ressemble exactement à bien, de même que la sortie. Je suppose que votre problème est que vous vous attendiez à voir 10:43:48 -0500 dans le journal plutôt que 15:43:48 +0000 . La chose est - ça va bien. Ils sont la même heure . C'est à quel point il imprime lorsque vous appelez nslog.


Ok, je me sens comme un vrai idiot maintenant ... NSLOG est l'impression expire comme GMT après avoir appliqué le décalage de -0500. Je m'attendais à le voir 07:00:00. Je pense que je l'obtiens maintenant. Merci pour toute votre aide. Maintenant, j'ai juste besoin de comprendre comment l'obtenir pour appeler cette méthode chaque fois que l'application est utilisée. Merci encore!


P.s. J'ai compris comment obtenir la dernière partie comment travailler aussi, de sorte que cela enregistre un nouveau fil!


4 Réponses :


5
votes

Un objet nsdate code> représente un instant à temps quel que soit le fuseau horaire et les considérations de calendrier. Les informations sur le fuseau horaire sont pertinentes lorsque vous imprimez ou d'analyser une date, mais il n'est pas stocké dans em> le nsdate code>.

Dites que vous créez votre date d'expiration comme ceci:

if ([installDate timeIntervalSinceNow]<(-within)]) { /* it's expired */}


3 commentaires

Merci, invariant! Cela a aidé propre (et clair) les choses un peu, merci. Malheureusement, j'ai toujours un problème avec la question du fuseau horaire. InstallDate est défini en utilisant actuellementDate (nsdate * CourmentDate = [date nsdate];) Il reste donc une divergence pendant la comparaison. Étant donné que l'objectif est de réutiliser la classe sans éditer et de permettre des décalages horaires de fuseau horaire, est-il de ne pas aller avec cela?


Je suis sûr que Nsdate est la bonne façon d'aller, je le fais cette voie exacte moi-même. Je pense que vous êtes mal compris que Nsdate fonctionne. Si vous enregistrez la date d'installation à l'aide de [NSDate Date] , stockez-le, puis comparez-le ultérieurement, à nouveau avec [NSDate Date] (ou TIMEIVERSINCENOW ), alors il vous donnera toujours le temps écoulé entre les moments que ces méthodes étaient appelées . Le fuseau horaire n'en vient tout simplement pas, c'est juste une notation pour quand vous l'afficherez ou le stockez comme une chaîne. Je fais la chose exacte dans mon propre code sans aucun problème.


Je suppose que je ne comprends toujours pas. J'ai édité ci-dessus pour montrer le code et les résultats de NSLog ...



0
votes

en cacao, nsdate est une représentation abstraite d'une date sans aucune information de fuseau horaire appliquée. Notez que couranteDatewithoffset est la même date que la chaîne de date, juste dans un fuseau horaire différent (cinq heures à venir). Ceci est attendu comportement, comme nsdate ne persiste pas le fuseau horaire utilisé pour la créer.


0 commentaires

0
votes

J'ai bricolé un peu plus et j'ai trouvé un moyen de "tromper" le décalage pour répondre à mes besoins. D'une autre lecture, je suppose que Nscalendar pourrait être une meilleure solution à long terme, mais pour l'instant, j'ai fini par changer xxx

à xxx

Cela m'a eu les résultats dont j'avais besoin et travaille dans les dernières comparaisons que j'utilise. Merci pour les informations de fond tous!


2 commentaires

Il serait préférable d'avoir mis les efforts pour créer correctement la date de référence, alors vous n'auriez pas eu à sonner la date actuelle pour le faire fonctionner.


Je vais essayer de comprendre comment faire ça.



17
votes

Aucune de ces réponses m'a donné un objet nsdate code> avec la date locale actuelle. Alors voici comment je l'ai fait:

NSDate *currentDateWithOffset = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone localTimeZone] secondsFromGMT]];


1 commentaires

Je vois ta Tête partiout! Merci d'avoir répondu!