iphone NSDate - получить сегодняшнюю дату и выставить время - PullRequest
3 голосов
/ 11 сентября 2010

Надеюсь, быстрый для кого-то!Я изо всех сил пытаюсь понять, почему код ниже не работает.Я пытаюсь получить сегодняшнюю дату (например, 2010-09-10) и вручную добавить время.Хотя всегда кажется, что время возвращается 00:00:00.Есть идеи, где я иду не так?

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"]];

Объекты NSDate все время возвращают формат 2010-09-10 00:00:00 +01: 00.Где-то просто не хватает времени .... есть идеи?большое спасибо.

* ОБНОВЛЕНИЕ *

Код ниже работает.Я сделал так, как предложил, и получил доступ к элементам и обновил их.

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];

Ответы [ 2 ]

3 голосов
/ 11 сентября 2010

Вы должны использовать NSCalendar вместо этого. Это позволяет вам анализировать текущую дату и изменять ее компоненты . Как вы можете инициализировать его с сегодняшней датой, а затем установить время, а затем получить от него NSDate.

(Старый ответ: поскольку ваш форматтер настроен на распознавание только части даты. Добавьте к ней часть времени (даже если его имя - NSDateFormatter, он с радостью проанализирует даты и время), и вы тоже увидите время.)

1 голос
/ 27 февраля 2012

Я нашел этот вопрос сегодня, пытаясь сделать то же самое, создать NSDate с определенным временем сегодня. Представленное решение не совсем то, что мне было нужно, поэтому я придумал следующее:

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];
...