サーバーに 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 と現地の日付との時差です。
これらの値は、年、月、日、時間、および分が適切に設定され、サーバーによって受信されます。他の値のいくつかが適切に表示されているため、私はそれを知っています。
ただし、この日時変換プロセスがうまくいかない場合はほとんどありません。
なぜそれが起こるのですか?
私のデバイスでは発生していませんが、他の国のユーザーには発生しているため、再現方法がわかりません。彼らはそれを再開しようとしましたが、まだ間違った日付を取得しています. ありがとう。