NSDateFormatter将2001年1月1日作为日期返回

时间:2013-08-21 15:58:27

标签: ios nsdateformatter

我在服务器上以GMT格式存储值。 我在设备上下载它们并通过以下功能将其转换为用户本地时间:

- (void)convertTimeZone
{
    //Converts the match timing from GMT to the users local time
    NSString *serverDateString = [NSString stringWithFormat:@"%@-%@-%@ %@:%@ GMT", year, month, day, hour, min];

    NSDateFormatter *dateFormatter = [NSDateFormatter new];
    dateFormatter.dateFormat       = @"yyyy-MM-dd HH:mm zzz";

    NSDate *serverDate             = [dateFormatter dateFromString:serverDateString];

    NSString *localDateString      = [dateFormatter stringFromDate:serverDate];
    NSDate *localDate              = [dateFormatter dateFromString:localDateString];


    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSHourCalendarUnit |NSMinuteCalendarUnit |NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:localDate];

    min   = [NSString stringWithFormat:@"%d",[components minute]];
    hour  = [NSString stringWithFormat:@"%d",[components hour]];
    day   = [NSString stringWithFormat:@"%d",[components day]];
    month = [NSString stringWithFormat:@"%d",[components month]];
    year  = [NSString stringWithFormat:@"%d",[components year]];

}

转换后几乎每个人都得到适当的时间。但是很少有用户写过他们收到的日期是2001年1月1日,这是iOS和OSX上的初始化日期。 而日期是GMT与当地日期之间的时差。

它们的值,年,月,日,小时和分钟由服务器正确设置和接收。我知道,因为其他一些值正确显示。

然而,在少数情况下,此日期 - 时间转换过程出错。

为什么会这样?

由于我的设备上从未发生过这种情况,但其他国家的用户却发生了这种情况,我不知道如何重现它。他们试图重新启动它,但他们仍然得错了日期。 感谢。

2 个答案:

答案 0 :(得分:1)

根据QA1480的要求,您无法设置区域设置。因此,您设置的日期格式可能会根据用户的设置进行修改。

明确设置区域设置以解决问题。

答案 1 :(得分:1)

如果您使用NSDateFormatter来阅读或发出需要采用特定格式的日期,则您需要执行以下操作:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];

这样可以防止出现问题,例如here