2014-10-08 2 views
1

У меня есть следующий код для преобразования строки на дату. Возможно ли, что он устанавливает время как «00:00:00», а не текущее время?время установки при форматировании с использованием NSDateformatter

NSDateFormatter *dateformat = [[NSDateFormatter alloc] init]; 
[dateformat setDateFormat:@"yyyy-MM-dd"]; 
NSString *str = @"2014-08-08"; 
NSDate *dt = [dateformat dateFromString:str]; 

Это дает DT как "2014-08-08 15:20:00 +0000", потому что я сделал операцию в 15:20.

Edit: Я использую эту дату, чтобы преобразовать его в целое число позже, чтобы сохранить его в базе данных:

int t = [dt timeIntervalSince1970]; 
+0

Какие базы данных? CoreData? Если это вам не нужно конвертировать. В любом случае, это преобразование будет прекрасным. Убедитесь, что вы используете 'NSInteger'. – Fogmeister

+1

Весь этот вопрос спорный. То, что вы делаете, правильно. Чтобы получить строку «2014-08-08 15:20:00 +0000», вы должны отображать ее где-нибудь. Это заставляет вас думать, что есть ошибка. Нет. Добро пожаловать на работу с NSDate. Работа с TimeZones - это то, что вам нужно сделать. – Fogmeister

+0

sqlite с использованием FCModel-обертки. Зачем использовать NSInteger, а не int? – Anuj

ответ

1

Если вы показываете дату dt с NSLog вы увидите, что метод описания дата предоставляет. Если вы хотите увидеть дату определенным образом, который подходит вам, используйте NSDateFormatter для форматирования даты.

Пример:

NSDateFormatter *dateformat = [[NSDateFormatter alloc] init]; 
[dateformat setDateFormat:@"yyyy-MM-dd"]; 
NSString *str = @"2014-08-08"; 
NSDate *dt = [dateformat dateFromString:str]; 

NSDateFormatter *displayDateformat = [[NSDateFormatter alloc] init]; 
[displayDateformat setDateFormat:@"yyyy-MM-dd"]; 
NSString *displayDateString = [displayDateformat stringFromDate:dt]; 
NSLog(@"displayDateString: %@", displayDateString); 

Выход:

2014-08-08

Примечание за Apple, документы: «Этот метод возвращает значение времени по отношению к абсолютному дате отсчета - первый момент 1 января 2001 года, GMT ".

+0

О, подождите. Я вижу сейчас. Я, хотя ты был аскером. Это не будет компенсировать время, установленное как текущее время. Это остановит все строки, показывающие время. – Fogmeister

+0

вам не нужен второй 'NSDateFormatter', вы можете просто повторно использовать' dateformat', так как формат тот же в 'dateformat' и' displayDateformat' – Daniel

+0

ОК, да, кроме двух одинаковых форматов даты, которые не нужны верно. Это проблема отображения. – Fogmeister

1

Хорошей практикой является использование NSDateComponents

NSDate *yourDate = [NSDate date]; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:yourDate]; 
[calendar setTimeZone:[NSTimeZone localTimeZone]]; 
// Set the time components manually 
[dateComponents setHour:0]; 
[dateComponents setMinute:0]; 
[dateComponents setSecond:0];    

yourDate = [calendar dateFromComponents:dateComponents]; 

Update

iOS8:

[[NSCalendar currentCalendar] startOfDayForDate:[NSDate date]]; 
+0

@ Zaph это тоже правильно, но получает +1 для использования Компонентов даты, и это то, что вы должны делать. – Fogmeister

+0

Дело в том, что форматирование экрана не рассматривается. Хотя это может быть лучше, он дает тот же результат, что и код OP. – zaph

+0

@Zaph Вопрос о том, возможно ли установить время как «00:00:00», а не текущее время », а не форматирование вывода – Daniel

Смежные вопросы