我在服务器上以 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 上的初始化日期。日期是格林威治标准时间与其当地日期之间的时差。
它们的值是由服务器正确设置和接收的年、月、日、小时和分钟。我知道这是因为其他一些值显示正确。
然而,这种日期时间转换过程在少数情况下会出错。
为什么会这样?
由于它从未发生在我的设备上,但发生在其他国家的用户身上,我不知道如何重现它。他们试图重新启动它,但他们仍然得到错误的日期。谢谢。