NSDateFormatter and Time Zone issue?

2019-01-11 17:52发布

问题:

I have a string with time in GMT and i want to make it according to the system time zone but its not working properly -

NSLog(@"Time Str = %@",Time);

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd-MM-yyyy hh:mm a"];

[NSTimeZone resetSystemTimeZone];

NSLog(@"system time zone = %@",[NSTimeZone systemTimeZone]);

[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];

NSDate *date = [dateFormat dateFromString:Time];

[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];
NSLog(@"date from string = %@",date);
NSLog(@"string from date = %@",[dateFormat stringFromDate:date]);

Output at console -

////////////////////////////////////////////////////////////////////////////////////////////////

Time Str = 09-12-2011 07:57 AM

system time zone = Asia/Calcutta (IST) offset 19800

date from string = 2011-12-09 02:27:00 +0000

string from date = 09-12-2011 07:57 AM

////////////////////////////////////////////////////////////////////////////////////////////////

Calcutta is +5:30 from GMT, so the time in date should be 1:27 but its showing 02:27. Also when i take a string from this date its showing me the same sting that i used to make date, i want the string updated according system time zone.

Thanks

回答1:

If the date string is in GMT you can't use your system Timezone to create the NSDate from the NSString.

replace the first occurrence of [dateFormat setTimeZone:[NSTimeZone systemTimeZone]];

with [dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];