Search code examples
iphoneiosobjective-cnsdatenstimezone

Convert GMT time to local time


I got current GMT time - 2013-05-15 08:55 AM

my current local time is - 2013-05-15 02:06 PM and time zone is - Asia/Kolkata

I tried to convert the above GMT to my local time with this code

   NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"Asia/Kolkata"];
   [dateFormatter setTimeZone:sourceTimeZone];


      // timeStamp - is the above GMT time

   NSDate *dateFromString = [dateFormatter dateFromString:timeStamp];
    NSLog(@"local time is %@",dateFromString);

but this give me wron time as - 2013-05-14 19:04:00 +0000 instead of 2013-05-14 02:06 PM

Why this happens? please help me to clear this.Thanks in advance


Solution

  • Nothing is going wrong, a NSDate instance will never have a timezone ( well it will but it is always GMT, indicated by the +0000 timezone in the date description).

    What you are telling dateformatter in your code is that the timezone of the date you want to parse is Asia/Kolkata but you want it to be GMT.

    First you need to make a NSDate object from the input date string with the time zone set to the correct time zone, GMT as you indicated.

    NSTimeZone *gmtTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    [dateFormatter setTimeZone:sourceTimeZone];
    NSDate *dateFromString = [dateFormatter dateFromString:timeStamp];
    NSLog(@"Input date as GMT: %@",dateFromString);
    

    Then when you present the date as an string use :

    NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithName:@"Asia/Kolkata"];
    [dateFormatter setTimeZone:sourceTimeZone];
    NSString *dateRepresentation = [dateFormatter stringFromDate:dateFromString];
    NSLog(@"Date formated with local time zone: %@",dateRepresentation);