Search code examples
iosnsdatensdateformatternstimezonenslocale

Unable to convert string date with GMT for Nsdate


I have a string like a below example

2013-12-28T8:15:00+03:00

but i want to convert to NSDate with same format here is my code

NSDateFormatter *dateFormatterInBoundSegment = [[NSDateFormatter alloc] init];

[dateFormatterInBoundSegment setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssz"];

[dateFormatterInBoundSegment setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

NSDate *dateInboundSegment = [dateFormatterInBoundSegment dateFromString:@"2013-12-28T8:15:00+03:00"];

NSLog(@"Formatted date %@",dateInboundSegment); 

And result printed like this

Formatted date 2013-12-28 05:15:00 +0000

I want to convert to nsdate with GMT +3 like string ,result should be like this

2013-12-28T8:15:00+03:00

Solution

  • NSDate doesn't store the time zone, NSDate is just a number that represents a date. When you print it on the screen, it's just formatted like that, but your date and that one are the same.

    This:

    2013-12-28 05:15:00 +0000
    

    and this:

    2013-12-28T8:15:00+03:00
    

    Represent the same date, just printed in a different way.

    When you do this: NSLog(@"Formatted date %@",dateInboundSegment); You are not specifying how the date has to be formatted to string, so it's using a default mode.

    If you want to print the NSDate with the proper timezone, you need to create a string with a formatter and set the timezone.