iphone конвертировать NSDate с сервера на локальное время устройства и сравнить - PullRequest
1 голос
/ 11 февраля 2012

Я обращаюсь к данным сервера в определенное время, которое находится в другом часовом поясе, мне нужно сравнить эту дату со временем моего устройства и показать некоторые последние обновления для пользователя.

ServerTime, которое я получаю, как показано ниже.

enter code here
     NSString *localString = @"2012-02-10T23:53:46+0000";
     NSString *serverTime = @"2012-02-11T06:17:39+0000";

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

    NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    NSDate* sourceDate = [dateFormatter dateFromString:serverTime];

    NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

    NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];


    NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];

     NSLog(@"Source OFFSET %i",sourceGMTOffset)
     NSLog(@"Desti OFFSET %i",destinationGMTOffset);

     NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

     NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] ;

    NSString *thePubDate =  [dateFormatter stringFromDate:destinationDate];
    NSLog(@"Result : %@",thePubDate);
    [dateFormatter release];

1 Ответ

2 голосов
/ 11 февраля 2012

Ваш формат даты не соответствует формату вашей строки даты.Прочитайте о шаблонах формата даты Unicode .
И после этого попробуйте @"yyyy-MM-dd'T'HH:mm:ssZZZ"

Но я думаю, вы все равно пытаетесь сделать что-то не так.Время одинаково для всех мест в мире.Вам не нужно вычислять новую NSDate только потому, что ваш источник находится в другом часовом поясе.

Используйте dateFormat сверху и сравните его напрямую с другой NSDate.

Возможно что-то вроде этого:

NSString *serverTime = @"2012-01-11T06:17:39+0000";

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
NSDate* sourceDate = [dateFormatter dateFromString:serverTime];
if (!sourceDate) {
    NSLog(@"Wrong NSDateFormatter format!");
}
else {
    NSDate *date24HoursAgo = [NSDate dateWithTimeIntervalSinceNow:-(24*60*60)];
    NSLog(@"%@", sourceDate);
    NSLog(@"%@", date24HoursAgo);
    if ([sourceDate compare:date24HoursAgo] == NSOrderedAscending) {
        NSLog(@"Timestamp from server is older than 24 hours.");
    }
}
...