2009-11-30 4 views
4

Je n'ai pas beaucoup utilisé NSDate, alors j'aimerais avoir de l'aide pour faire un calcul.Convertir "heure actuelle" en "temps en minutes depuis 00:00" aide au calcul

J'ai un nombre entier qui a l'heure de fermeture de mon magasin en minutes depuis minuit. Fondamentalement, mon magasin se ferme à 17h00, ce qui me donne l'entier 1020.

Donc maintenant il est 10h45 ou 22h45. Entier depuis 00h00 est 1365, et de ce que je peux dire

if (storeHour < currentTime) { 
     // closed! 
} 

Cependant, je ne sais pas comment je reçois de « 22,45 » que j'ai de NSDate à le convertir en un entier représentant le temps depuis 00 : 00. Est-ce qu'il y a quelque chose dans NSDate qui peut m'aider avec ça?

Thx

Répondre

7

Je ne recommande pas d'utiliser un objet NSDate pour stocker l'heure de fermeture du magasin au lieu d'utiliser votre propre format d'entier personnalisé. Il est regrettable que NSDate représente à la fois la date et l'heure de la date.

Dans tous les cas, vous pouvez vérifier NSDateComponents. Vous pouvez avoir une méthode utilitaires comme:

int minutesSinceMidnight:(NSDate *)date 
{ 
    NSCalendar *gregorian = [[NSCalendar alloc] 
     initWithCalendarIdentifier:NSGregorianCalendar]; 
    unsigned unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit; 
    NSDateComponents *components = [gregorian components:unitFlags fromDate:date]; 

    return 60 * [components hour] + [components minute];  
} 
+0

Merci, qui l'a fait pour moi :) – runmad

+2

Si vous faites cette méthode de catégorie de NSDate vous n'auriez pas besoin de passer la date en paramètre. Assurez-vous simplement de préfixer le nom de la méthode de la catégorie avec votre propre espace de nom. –

1

Si vous avez une autre NSDate qui est fixé à minuit, vous pouvez utiliser pour obtenir un retour NSTimeInterval la méthode timeIntervalSinceDate de l'objet NSDate à la différence entre les deux. Alternativement, si vous voulez toujours comparer minuit avec l'heure actuelle, vous pouvez appeler la méthode timeIntervalSinceNow sur le NSDate de minuit et vous obtiendrez un NSTimeInterval retour (bien que négatif) avec la différence entre minuit et l'heure actuelle.

NSTimeInterval est défini comme double par la norme qui contient un nombre de secondes (et toutes fractions fractionnaires).

2

Une version rapide de ce @notnoop a répondu:

func minutesSinceMidnight(start : NSDate) -> Int { 

    let units : NSCalendarUnit = [.Hour, .Minute] 
    let components = NSCalendar.currentCalendar().components(units, fromDate: start) 
    return 60 * components.hour + components.minute 
} 
Questions connexes