2012-04-19 3 views
0

Мне нужно проверить дату события, которая должна быть между текущей датой и 60 днями позже. Используется код ниже, но он НЕ работает правильно. Обратите внимание, что я получаю строку с таким же событием - «2012-04-14T16: 50: 02Z» с моего сервера.iPhone: проблемы с преобразованием даты

// current date 
double currDateInMilliSecs = [NSDate timeIntervalSinceReferenceDate] * 1000;  
NSLog(@"currDateInMilliSecs: %f", currDateInMilliSecs); 

// sixty days 
double sixtydaysvalue = 60.0 * 24.0 * 3600.0 * 1000.0; 
NSLog(@"sixtydaysvalue: %f", sixtydaysvalue); 
// add current date + sixt days 
double sixtyDaysMilliSecsFromCurrDate = currDateInMilliSecs + sixtydaysvalue; 
NSLog(@"sixtyDaysMilliSecsFromCurrDate: %f", sixtyDaysMilliSecsFromCurrDate); 

// check does the event date between current date + 60 days 
NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
//[df setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 
//[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

// [eventDict objectForKey:@"begin_at"] gives date string like this "2012-04-14T16:50:02Z" for ex. 
NSDate *eventdate = [df dateFromString:[eventDict objectForKey:@"begin_at"]]; 

NSTimeInterval nowSinceEventDate = [eventdate timeIntervalSince1970]; 
NSLog(@"nowSinceEventDate: %f", nowSinceEventDate); 
double eventDateInMilliSecs = nowSinceEventDate * 1000; 
NSLog(@"eventDateInMilliSecs: %f", eventDateInMilliSecs); 

// this is not working as expected  
if (eventDateInMilliSecs<sixtyDaysMilliSecsFromCurrDate && eventDateInMilliSecs>currDateInMilliSecs) 
{ 


} 
else 
{ 
} 

Любая помощь пожалуйста?

+0

Если вам нужно разогнать миллисекунду вместе со временем, как 3: 43: 12: 23 глупость мой ответ или ответ @ vinay – Ranga

+0

возможный дубликат [iPhone: проблема сравнения даты между текущей датой и шестидесяти днями с текущей даты] (http://stackoverflow.com/questions/10228816/iphone-issue-comparing-a-date-between-current-date-and-sixty-days-from-current) –

ответ

0
NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss:SSS"]; 
// [eventDict objectForKey:@"begin_at"] gives "2012-04-14T16:50:02Z" 
NSDate *eventdate = [df dateFromString:[eventDict objectForKey:@"begin_at"]]; 

[DF setDateFormat: @ "гггг-ММ-дд чч: мм: сс"];

SSS за милли секунд

+0

Эта проблема решена. Спасибо всем. – Getsy

1

Попробуйте это:

NSString *dateString = @"2012-04-14T16:50:02Z"; 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 
NSDate *eventDate = [formatter dateFromString:dateString]; 

NSTimeInterval nowSinceEventDate = [eventDate timeIntervalSince1970]; 
NSLog(@"interval = %f", nowSinceEventDate); 

UPDATE:

NSString *dateString = @"2012-05-21T16:50:02Z"; 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 
NSDate *eventDate = [formatter dateFromString:dateString]; 

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [[NSDateComponents alloc] init]; 
[components setDay:60]; 

NSDate *minDate = [NSDate date]; 
NSDate *maxDate = [gregorian dateByAddingComponents:components toDate:minDate options:0]; 

NSLog(@"eventDate interval = %f", [eventDate timeIntervalSince1970]); 
NSLog(@"minDate interval = %f", [minDate timeIntervalSince1970]); 
NSLog(@"maxDate interval = %f", [maxDate timeIntervalSince1970]); 

BOOL isBetween = (([eventDate compare:minDate] == NSOrderedDescending) && ([eventDate compare:maxDate] == NSOrderedAscending)); 
NSLog(@"isBetween = %d", isBetween); 
+0

На самом деле я сделал это уже, он работает. Моя проблема сейчас новая. Я хочу сравнить «2012-04-14T16: 50: 02Z» дата должна быть между текущей датой и плюс 60 дней. Таким образом, я добавил логику, как получение текущей даты в миллисекундах, а затем добавление 60 дней в миллисекундах плюс текущая дата (миллисекунды) и сравнение этого с dateString = "2012-04-14T16: 50: 02Z" миллисекунды. Но, это не сравнивается должным образом, как мне нужно. Потому что текущая дата 356530435017.459961, плюс 60 дней 361714435017.459961, но датаString = "2012-04-14T16: 50: 02Z" миллисекунда 1336559400000.000000. Любая помощь? – Getsy

+0

, пожалуйста, ознакомьтесь с моей обновленной проблемой в вопросе. – Getsy

+0

см. Обновление :) – demon9733

1

попробовать этот

[dateFormatter setDateFormat: @ "yyyy-MM-dd'T'HH: mm: ss SSS"];

+0

это правильно, если вам нужно разогнать миллисекунду вместе со временем вроде 3: 43: 12: 23 – Ranga

+0

, пожалуйста, ознакомьтесь с моей обновленной проблемой в вопросе. – Getsy