Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

johnmerlino

macrumors member
Original poster
Oct 22, 2011
81
0
self.report.time returns 02/13/2012 03:40:02 PM


I try to format it:

Code:
- (NSString *)formatTimeFor:(Report *)report
{
    if(report){
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
        [dateFormat setDateFormat:@"MM/dd/YYYY HH:mm:ss a"];
        NSDate *date = [dateFormat dateFromString:report.time];
                
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setTimeZone:[NSTimeZone systemTimeZone]];
        [formatter setDateFormat:@"yyyy/MM/dd HH:mm:ss a"];
        NSString *dateTimeStr = [formatter stringFromDate:date];
        
        return [NSString stringWithFormat:@"%@", dateTimeStr];
    }
    else {
        return  @"No time specified";
    }

}

and it returns 2011/12/25 07:40:02 AM
 

Duncan C

macrumors 6502a
Jan 21, 2008
853
0
Northern Virginia
self.report.time returns 02/13/2012 03:40:02 PM


I try to format it:

Code:
- (NSString *)formatTimeFor:(Report *)report
{
    if(report){
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
        [dateFormat setDateFormat:@"MM/dd/YYYY HH:mm:ss a"];
        NSDate *date = [dateFormat dateFromString:report.time];
                
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setTimeZone:[NSTimeZone systemTimeZone]];
        [formatter setDateFormat:@"yyyy/MM/dd HH:mm:ss a"];
        NSString *dateTimeStr = [formatter stringFromDate:date];
        
        return [NSString stringWithFormat:@"%@", dateTimeStr];
    }
    else {
        return  @"No time specified";
    }

}

and it returns 2011/12/25 07:40:02 AM


You are creating a date formatter that assumes your input date string is in the GMT time zone, and then converting that date into a new date string in the user's local time zone. Unless the user is in GMT, your code will give the wrong date/time.

Get rid of the line that sets the first date formatter to GMT. Let both date formatters assume the user's current time zone. Alternately, make BOTH date formatters use GMT.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.