2010-09-10 3 views
3

j'espère que rapide pour quelqu'un! J'ai du mal à voir pourquoi le code ci-dessous ne fonctionne pas. J'essaie d'obtenir la date du jour (par exemple: 2010-09-10) et d'ajouter manuellement l'heure. Il semble toujours revenir 00:00:00 pour le moment cependant. des idées où je vais mal?iphone NSDate - obtenir la date d'aujourd'hui et de forcer le temps

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
dateFormatter.dateFormat = @"yyyy-MM-dd"; 

NSString *actualDate = [dateFormatter stringFromDate:[NSDate date]]; 
NSDate *sDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@ %@", actualDate, @"01:00:00"]]; 
NSDate *eDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@ %@", actualDate, @"23:59:59"]]; 

Les objets NSDate retournent le format 2010-09-10 00:00:00 +01: 00 tout le temps. Quelque part, il ne prend pas le temps ... des idées? Merci beaucoup.

* MISE À JOUR *

Le code ci-dessous fonctionne. J'ai fait comme suggéré et a accédé aux éléments et les ai mis à jour.

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; 
    NSDate *date = [NSDate date]; 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDateComponents *comps = [calendar components:unitFlags fromDate:date]; 

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
dateFormatter.dateFormat = @"yyyy-MM-dd hh:mm:ss"; 

//update for the start date 
[comps setHour:0]; 
[comps setMinute:0]; 
[comps setSecond:0]; 
NSDate *sDate = [calendar dateFromComponents:comps]; 

//update for the end date 
[comps setHour:23]; 
[comps setMinute:59]; 
[comps setSecond:59]; 
NSDate *eDate = [calendar dateFromComponents:comps]; 

Répondre

3

Vous devriez utiliser NSCalendar à la place. Il vous permet d'analyser la date actuelle et de modifier ses composants . Comme vous pouvez l'initialiser avec la date d'aujourd'hui et ensuite régler l'heure et ensuite obtenir un NSDate à partir de celui-ci. (Ancienne réponse: Parce que votre formateur est configuré pour reconnaître uniquement la partie date, ajoutez-lui la partie temps (même si son nom est NSDateFormatter, il analysera heureusement les dates et les heures) et vous verrez aussi l'heure.

+0

Même quand j'ajoute hh: mm: ss, je reçois le temps, mais je ne suis pas intéressé par cela. Je dois simplement obtenir la date du jour, puis créer deux nouveaux NSDates à partir de cela. Une date de début de la date d'aujourd'hui et l'heure 00:00:00 et la date de fin de la date du jour et l'heure 23:59:59. Selon mon code, j'espérais obtenir seulement la date. Je ne suis pas intéressé par le temps ... Je veux donner le nouveau NSDate les fois que j'ai spécifié. –

+0

Merci St3fan .. J'ai mis à jour mon message avec un nouveau code. –

+0

Je viens de relire votre message et fait ce que vous avez dit! Désolé ... ça marche maintenant. Mettra à jour le code dans le mien pour le montrer fonctionner –

1

J'ai trouvé cette question aujourd'hui tout en cherchant à faire la même chose, créer un NSDate avec un moment précis aujourd'hui. La solution présentée était pas tout à fait ce que je devais donc je suis venu avec ceci:

NSDate *    date; 
NSString *    string, *timestamp; 
NSDateFormatter *  formatter; 

timestamp = @"17:30"; 

formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat: @"yyyy-MM-dd "]; 
[formatter setTimeZone: [NSTimeZone localTimeZone]]; 

string = [formatter stringFromDate: [NSDate date]]; 
string = [string stringByAppendingString: timestamp]; 

[formatter setDateFormat: @"yyyy-MM-dd HH:mm"]; 
date = [formatter dateFromString: string];