6
votes

Nsdate pour "début de la prochaine heure"

J'aimerais faire un compte à rebours à la prochaine heure complète. Il est assez facile de compter à rebours à un moment précis, comme: xxx

Comment puis-je définir un nsdate pour "le début de chaque heure"?

Merci! Merci!

Edit: Voici ce que j'ai actuellement. Avoir du mal à intégrer les solutions à mon code. Toute aide serait grandement appréciée. :) xxx


0 commentaires

6 Réponses :


17
votes

comme + datewithnaturalangangangsestring code> est disponible sur MacOS SDK et votre iPhone ciblant que vous devrez faire une méthode. Je pense que nscalendar code> classe peut vous aider:

- (NSDate*) nextHourDate:(NSDate*)inDate{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comps = [calendar components: NSEraCalendarUnit|NSYearCalendarUnit| NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit fromDate: inDate];
    [comps setHour: [comps hour]+1]; // Here you may also need to check if it's the last hour of the day
    return [calendar dateFromComponents:comps];
}


5 commentaires

Le code donné fonctionnera actuellement (même si l'heure suivante est minuit), mais je pense que vous devriez utiliser techniquement les DateByAddingComponents: TODATE: Au lieu d'ajouter manuellement les composants. Nscalendar est la bonne réponse, cependant.


Oui DateDeaddingComponents: Todate semble plus approprié, mais vous devez toujours réinitialiser la minute et la deuxième composantes à 0 en quelque sorte?


Qu'est-ce qui ne fonctionne pas exactement? Je viens de courir ce code - ça marche bien pour moi (je ne sais toujours pas si cela fonctionnera au cas où la prochaine heure est minuit)


Bonjour Vladimir .. J'ai ajouté quelques détails à ma question initiale. Thassk!


Remplacez Datwithnaturalangangstring Call avec appel à NexThaourdate?



3
votes

Vous voudrez peut-être vérifier cela. Erica Sadun a posté quelques extensions à Nsdate.

http://github.com/erica/nsdate-extensions


1 commentaires

Extension très utile, mais cela n'aide pas à la question de l'OP.



1
votes

Je pense que cela fonctionnerait (note: très brièvement testé) xxx


1 commentaires

Veuillez vérifier votre code avant de le soumettre. "Je pense que ..." n'est pas bon.



6
votes

La manière la plus simple probablement de manipuler l'horodatage, autour du début de l'heure actuelle et d'ajouter 1 heure xxx


1 commentaires

Nice fonctionne également pendant une demi-heure à la prochaine heure ou dans dix minutes, changez simplement la 3600 et à la suite des secondes.



6
votes

Utilisation de datecomponents et de date, vous l'obtenez en ajoutant une quantité négative de minutes et une heure à la date donnée.

swift3 (comme une extension): xxx > Utilisez-le avec Laissez NexThaourdate = mydate.nexthaour

Voir Apple Guide de programmation de la date et de l'heure pour référence.

=============== ========================================================== ==========

ObjectiveC (comme méthode statique): xxx

et appelez-le avec: < Pré> xxx


2 commentaires

Devrait être juste des composants.hour = 1; Comme nous ajoutons les heures, nous ne les remplaçons pas.


Le code SWIFT devrait avoir des minutes négatives, comme l'obj-C.



0
votes

Peut-être que cela peut être utile xxx

- (NSTIMITILERVAL) db_secondsfornexthaour { xxx

}


0 commentaires