2012-01-06 16 views
0
NSDateFormatter *dtFormatter = [[NSDateFormatter alloc] init]; 
[dtFormatter setDateFormat:@"yyyy-MM-dd hh:mm a"]; 
NSDate *selectedDate = [[NSDate alloc] init]; 
     selectedDate = [dtFormatter dateFromString:[NSString stringWithFormat:@"%@", [appDelegate.aryTime objectAtIndex:i]]];   
    NSLog(@"selected Date: %@", selectedDate); 
    NSLog(@"Today Date: %@", todayDate); 

    int interval = [todayDate compare:selectedDate]; 

У меня этот код. Теперь, когда я запускаю приложение, сохраняя формат региона (From Settings> General> International> set region format) Великобритании (где они используют AM и PM), приложение сравнивает обе даты в порядке. Но если я изменю свой региональный формат на Швецию (где они используют em и fm вместо), даты не сравниваются. Есть ли способ удалить зависимость формата региона и сравнить даты? Я попытался преобразовать их в 24-часовой формат, но это не помогло.Формат в формате NSDate

+1

Я думаю, Швеция использует 24-часовой режим, а не «em/fm». – Emil

ответ

1

Вы можете сравнить два с даты следующим образом ..

==> простираться во встроенном NSDate класса (.h, а также .m файлов)

#import <Foundation/Foundation.h> 
struct DateInformation { 
int day; 
int month; 
int year; 
int weekday; 
int minute; 
int hour; 
int second; 
}; 
    typedef struct DateInformation DateInformation; 
    @interface NSDate (Extra) 
    - (DateInformation) dateInformation; 
    @end 

класс реализации:

#import "NSDate+Extra.h" 

    @implementation NSDate (Extra) 

- (DateInformation) dateInformation 
    { 
DateInformation info; 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *comp = [gregorian components:(NSMonthCalendarUnit | NSMinuteCalendarUnit | NSYearCalendarUnit |NSDayCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSSecondCalendarUnit) 
             fromDate:self]; 
info.day = [comp day]; 
info.month = [comp month]; 
info.year = [comp year]; 

info.hour = [comp hour]; 
info.minute = [comp minute]; 
info.second = [comp second]; 

info.weekday = [comp weekday]; 


[gregorian release]; 
return info; 
    } 

@end 

от класса, в котором вы хотите сравнить цены на даты

сделать следующее за обе даты

NSDate *date=[NSDate date]; 
DateInformation info=[date dateInformation]; 
    NSLog(@"%@",info); 

NSDate *date1=[NSDate dateWithTimeIntervalSinceNow:1242141]; 
DateInformation info=[date1 dateInformation]; 
    NSLog(@"%@",info); 

реализовать еще один метод в расширенном классе дат для сравнения всех параметров даты, которые являются целыми числами ..

надеюсь, что это может помочь вам

С уважением, Neil

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