我在服务器上以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与当地日期之间的时差。
它们的值,年,月,日,小时和分钟由服务器正确设置和接收。我知道,因为其他一些值正确显示。
然而,在少数情况下,此日期 - 时间转换过程出错。
为什么会这样?
由于我的设备上从未发生过这种情况,但其他国家的用户却发生了这种情况,我不知道如何重现它。他们试图重新启动它,但他们仍然得错了日期。 感谢。
答案 0 :(得分:1)
根据QA1480的要求,您无法设置区域设置。因此,您设置的日期格式可能会根据用户的设置进行修改。
明确设置区域设置以解决问题。
答案 1 :(得分:1)
如果您使用NSDateFormatter
来阅读或发出需要采用特定格式的日期,则您需要执行以下操作:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
这样可以防止出现问题,例如here