NSDate регион формата вопроса - PullRequest
0 голосов
/ 07 января 2012
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];

У меня есть этот код.Теперь, когда я запускаю приложение, сохраняя формат региона («Настройки»> «Основные»> «Международный»> «Задать формат региона») Великобритании (где они используют AM и PM), приложение отлично сравнивает обе даты.Но если я изменю свой формат региона на Швецию (где вместо них используются em и fm), даты не будут сравниваться. Есть ли способ удалить зависимость формата региона и сравнить даты?Я пытался преобразовать их в 24-часовые форматы, но это не помогло.

1 Ответ

1 голос
/ 07 января 2012

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

==> расширить встроенный класс 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

...