2012-02-11 15 views
1

異なるタイムゾーンにある特定の時刻にサーバーデータにアクセスしています この日付とデバイス時間を比較し、ユーザーに最新の更新情報を表示する必要があります。iphoneサーバーからローカルデバイスへのNSDateの変換時間と比較

私は以下のようになっています。

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]; 
+0

し、以下のように結果を得る.. 2012-02-10 23:54:29.296テスト[309:207]ソースは0 2012-02-10 23 OFFSET: 54:29.297テスト[309:207]デスティOFFSET -28800 2012-02-10 23:54:29.298テスト[309:207]結果:1969-12--2147483629 -596:-31:-23 誰でも私に解決策を教えてください。 – Avinash

+0

3分またはそれ以上の時間ごとにデータを更新したいですか。 –

+0

私は特定の間隔の後にデータにアクセスする必要があります – Avinash

答えて

2

あなたのdateFormatは、あなたの日付文字列のフォーマットと一致しません。 Unicode Date Format Patternsについて読む
その後、試してみてください@"yyyy-MM-dd'T'HH:mm:ssZZZ"

しかし、私はあなたが何か間違って何かをしようとすると思います。
NSDateはある時点であり、世界のすべての場所で同じです。ソースが異なるタイムゾーンにあるため、新しい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."); 
    } 
} 
+0

init 'date24hours'は間違っています。アップルはWWDC 2012のイベントキットに関するセッションで間違っている(いくつかの数字を掛けることによって)時間間隔を作成するこの方法を述べている。 NSDateComponentsは正しいアプローチです。 – Devfly

関連する問題