我正在访问不同时区的特定时间的服务器数据, 我需要将此日期与设备时间进行比较,并向用户显示最近的更新。
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];
答案 0 :(得分: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.");
}
}