1

Я потратил пару часов, чтобы решить эту странную проблему. У меня есть форматная форма в «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; 

// Действовать, чтобы сделать вашу работу

ответ

4

В течение месяца это должно быть «ММ».

Изменить следующую строку

[dateFormatter setDateFormat:@"dd/mm/yyyy hh:mm:ss"]; 

в

[dateFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss"]; 

Редактировать К сожалению, формат должен быть

[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"]; 
+0

ли это решить проблему? – Ilanchezhian

+0

OMG, не могу поверить, что я провел утро на этом! Благодарю. – applefreak

+0

все еще есть некоторые проблемы при вычислении секунд. См. Отредактированный вопрос. Благодарю. – applefreak

1

Проверьте формат строки, вы хотите @ "дд/MM/yyyy hh: mm: ss ". С тем, что у вас есть, вы рассматриваете минуты как месяц.

0

Try This

 NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
     [df setDateFormat:@"dd-MM-yyyy HH:mm:ss"]; 

     NSDate *date = [df dateFromString:@"12-12-2013 15:50:50"]; 

     NSLog(@"Converted Date-->%@",date); 

     NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; 
     [dateComponents1 setDay:6]; 

     NSDate *afterSomeDays = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents1 toDate:date options:0]; 

     NSLog(@"afterfifteenDays: %@", afterSomeDays); 
Смежные вопросы