即使正确设置NSTimezone,仍然存在NSDateFormatter结果问题,为什么?

i_m*_*ush 2 iphone objective-c nsdate nsdateformatter ios

结果仍然是前一天,我只是问自己为什么,因为NSTimeZone是正确设置的,对我的国家(意大利,罗马)是正确的,这里是我的代码存根,任何想法?

    NSString *dateString = @"03/07/2008";
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setFormatterBehavior:[NSDateFormatter defaultFormatterBehavior]];
    [formatter setDateFormat:@"dd/MM/yyyy"];
    [formatter setLocale:[NSLocale currentLocale]];
    [formatter setTimeZone:[NSTimeZone systemTimeZone]];
    NSDate *dateFromString = [formatter dateFromString:dateString];
    [formatter release];
Run Code Online (Sandbox Code Playgroud)

dateFromString的结果是2008-07-02 22:00:00 +0000.

我已经寻找其他解决方案,但常见的答案是正确设置时区,在我的情况下,它设置正确但问题仍然存在.

Joe*_*Joe 6

这是正确的,因为默认情况下,NSDate它将在其描述中返回UTC日期+0000.您比UTC早了几个小时,所以前一天的时间是22:00:00.我是-5,我的结果UTC是2008-07-03 04:00:00 +0000(DST).日期是正确的,它只是以UTC显示,如果您试图在某处正确显示它只需使用日期格式化器再次获取字符串.

...
NSDate *dateFromString = [formatter dateFromString:dateString];
NSString *stringFromDate = [formatter stringFromDate:dateFromString];
[formatter release];

NSLog(@"%@ : %@", dateFromString, stringFromDate);
Run Code Online (Sandbox Code Playgroud)

2008-07-03 04:00:00 +0000:03/07/2008