NSDateFormatter returns unexpected results

Why is the following iOS 4.2 code returned twice?

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; [dateFormatter setTimeZone:gmt]; NSString* dateString = [dateFormatter stringFromDate:[NSDate date]]; NSLog(@"Date/Time is %@", dateString); NSDateFormatter *inputFormatter = [[[NSDateFormatter alloc] init] autorelease]; [inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate* date = [inputFormatter dateFromString:dateString]; NSLog(@"Date/Time is %@", date); 

Return:

 2011-01-04 16:15:12.966 WA[687:207] Date/Time is 2011-01-04 21:15:12 2011-01-04 16:15:12.967 WA[687:207] Date/Time is 2011-01-05 02:15:12 +0000 

The first value is expected, but I expect the second to be the same.

Bruce

+4
source share
2 answers

None of your date formats include a time zone, so you probably get the difference between your location and GMT.

+8
source

Since dateString is already GMT, the trick is to set the time zone to GMT on inputFormatter. This code works as expected:

  NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; [dateFormatter setTimeZone:gmt]; NSString* dateString = [dateFormatter stringFromDate:[NSDate date]]; NSLog(@"Date/Time is %@", dateString); NSDateFormatter *inputFormatter = [[[NSDateFormatter alloc] init] autorelease]; [inputFormatter setTimeZone:gmt]; [inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate* date = [inputFormatter dateFromString:dateString]; NSLog(@"Date/Time is %@", date); 

returns:

 2011-01-04 16:50:35.369 WA[888:207] Date/Time is 2011-01-04 21:50:35 2011-01-04 16:50:35.370 WA[888:207] Date/Time is 2011-01-04 21:50:35 +0000 
+2
source

Source: https://habr.com/ru/post/1334266/


All Articles