Я потратил пару часов, чтобы решить эту странную проблему. У меня есть форматная форма в «dd/mm/yyyy hh: mm: ss» и вы хотите узнать разницу между секундами между моей датой и СЕЙЧАС. Я делаю это, как показано ниже, но не понимая, почему он ошибается 31 день? Это должно быть разница в несколько часов! Может ли кто-нибудь помочь мне, что я делаю неправильно здесь?Цель C: Преобразование строки в nsdate issue
NSString* datetime = @"03/02/2012 10:25:34"; // Today's date
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"dd/mm/yyyy hh:mm:ss"];
NSDate *dateFromString = [dateFormatter dateFromString:datetime];
NSTimeInterval diffSeconds = [[NSDate date] timeIntervalSinceDate:dateFromString];
int totalDays = diffSeconds/(24*60*60);
NSLog(@"seconds:%f totaldays:%d",diffSeconds, totalDays);
ВЫВОД:
2012-02-03 10:50:50.480 UniversalApp[13114:707] diff:2679916.480563 totaldays:31
Затем я снова попытался преобразовать dateFromString в NSDate, и я удивлен, что напечатано совершенно произвольную дату. Не знаете, как это возможно? Он должен дать мою первоначальную дату «datetime»!
NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"dd/mm/yyyy hh:mm:ss"];
NSString* str = [formatter stringFromDate:dateFromString];
NSLog(@"date:%@ to date:%@", datetime, str);
ВЫХОД:
date:03/02/2012 10:25:34 to date:03/25/2012 10:25:34
[EDIT]
Замена "дд/мм/гггг чч: мм: сс" до "дд/мм/гггг чч: мм: сс" работали но разница секунд еще не подходит. Смотрите следующие результаты для разных дат!
Исправленный код:
NSLog(@"For Date:%@",[res objectForKey:@"CommentDate"]);
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss"];
NSDate *dateFromString = [dateFormatter dateFromString:[res objectForKey:@"CommentDate"]];
NSTimeInterval diffSeconds = [[NSDate date] timeIntervalSinceDate:dateFromString];
int totalDays = diffSeconds/(24*60*60);
NSLog(@"seconds:%f totaldays:%d",diffSeconds, totalDays);
ВЫВОД: (уведомление много выходов Nan !!)
2012-02-03 11: 30: 23,198 UniversalApp [13207: 707] Для Дата: 03/02/2012 10:25:34
2012-02-03 11: 30: 23,204 UniversalApp [13207]: 707 секунд: 3889.204166 totaldays: 0
2012-02-03 11: 30: 23,506 UniversalApp [ 13207: 707] Дата: 02/02/2012 16:56:05
2012-02-03 11: 30: 23,512 UniversalApp [13207]: 707 секунд: нан totaldays: 0
2012-02-03 11: 30: 23.818 UniversalApp [13207: 707] Для Дата: 02/02/2012 14:34:05
2012-02-03 11: 30: 23,827 UniversalApp [13207]: 707 секунд: нан totaldays: 0
2012-02-03 11: 31: 25,253 UniversalApp [13207: 707] ToDate: 02/02/2012 12:02:55
2012-02-03 11: 31: 25.255 UniversalApp [13207: 707] секунд: 127710.255748 всего: 1
2012-02-03 11: 32: 06,424 UniversalApp [13207: 707] Для Дата: 01/02/2012 11:01:20
2012-02-03 11: 32: 06,427 UniversalApp [13207 : 707] секунд: 174646.427676 totaldays: 2
2012-02-03 11: 32: 06,639 UniversalApp [13207: 707] Для Дата: 31/01/2012 17:38:17
2012-02- 03 11: 32: 06,643 UniversalApp [13207]: 707 секунд: нан totaldays: 0
[EDIT]
Замена «hh» на «HH» разрешена выше!
[EDIT]
Другой вопрос, который я столкнулся ... уф !!
Это не работает, если установлено 24 часа в сутки! На основе this он переопределяет пользовательские настройки.
Я не нашел сильного решения для этой последней проблемы. В конце концов я решил проверить значение «NaN» на несколько секунд, и если это «нан», затем использовать исходную строку даты и не превращаются в секунды, часы и т.д.
// Check for the 'nan', return if seconds='nan' invalid date format.
if(seconds != seconds)
return nil;
// Действовать, чтобы сделать вашу работу
ли это решить проблему? – Ilanchezhian
OMG, не могу поверить, что я провел утро на этом! Благодарю. – applefreak
все еще есть некоторые проблемы при вычислении секунд. См. Отредактированный вопрос. Благодарю. – applefreak