2009-10-26 18 views
2

Comment puis-je obtenir les premier et dernier jours de la semaine en cours? Ce dont j'ai besoin, c'est d'un moyen de filtrer un ensemble d'objets avec la propriété NSDate pour ne laisser que ceux qui apparaissent sur la semaine en cours, puis les filtrer par jours. Aussi j'ai besoin d'un moyen d'obtenir des noms de jour localisés. J'ai essayé de jouer avec NSCalendar, NSDate et NSDateComponents, mais il semble que je ne puisse pas vérifier le premier jour du calendrier, car il pourrait y avoir des semaines avec des jours du mois précédent/suivant.Obtenir les premier et dernier jours de la semaine en cours

Répondre

0

Ok, ici il va, un extrait de python qui fait le travail

def daySec(diff): 
    return 60*60*24*diff 

def weekDays(dt=None): 
    if not dt: 
     dt = NSDate.date() # use today 
    cal = NSCalendar.currentCalendar() 
    dc = cal.components_fromDate_(NSWeekdayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit, dt) 
    normDt = cal.dateFromComponents_(dc) # get the day-rounded date 
    shift = dc.weekday() - cal.firstWeekday() 
    firstDt = normDt.dateByAddingTimeInterval_(daySec(-shift)) 
    lastDt = normDt.dateByAddingTimeInterval_(daySec(-shift+7)) # up to next week's first day midnight 
    return (firstDt, lastDt) 
+0

Est-ce que cela utilise PyObjC? http://pyobjc.sourceforge.net/ –

+0

oui, c'est très bien pour résoudre ces problèmes rapidement. Avec ipython comme shell, vous pouvez obtenir des résultats rapidement et sans boucles write-compile-run encore et encore. – Farcaller

+1

L'approche NSDateComponents traitera correctement les jours qui n'ont pas 60 * 60 * 24 secondes. –

3

Utilisez NSDateComponents pour obtenir le jour de la semaine, ce qui est de 1 pour dimanche à 7.

Une fois que vous avez le numéro de la semaine, calculer la différence entre celui-ci et votre premier jour de la semaine. Par exemple, si vous considérez que lundi (2) est le premier jour, alors combien de jours auparavant l'avez-vous été (ou le seriez-vous)? Si le jour de la semaine est 4 (mer) alors la différence est 2. Cela signifie que si vous soustrayez deux jours de la date d'origine, vous obtiendrez le premier jour de la semaine dans lequel il se trouve.

Vérifiez le documentation for details, car vous devrez faire face au fait que ces objets incluent également des attributs de temps. Si vous le pouvez, assurez-vous que les valeurs de temps sont toujours nulles lorsque vous êtes uniquement intéressé par les comparaisons de dates et de dates.

+0

comment puis-je obtenir un NSDate de celui-ci? Plus précisément, quels champs de NSDateComponents je dois remplir en dehors du jour de la semaine, pour que NSCalendar le convertisse en premier NSDate de semaine? – Farcaller

+0

Cochez "Calendriers, composants de date et unités de calendrier" sur le lien de la documentation dans ma réponse. C'est assez évident. –