2016-12-11 14 views
0

私のアプリケーションでは、日付をサーバーから取得しました。たとえば、「2016-09-28T16:51:15.000 + 0700」です。私はNSDate取得するNSDateFormatterを使用:UIに表示しNSDateから文字列を取得するためにNSDateFormatter、すべてのタイムゾーンで同じ日付を表示

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ"; 
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 

、別のフォーマッタを

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.timeStyle = NSDateFormatterShortStyle; 
dateFormatter.dateStyle = NSDateFormatterShortStyle; 

それが正常に動作し、時間帯に応じて、日付と時刻を示しているが、今私が持っていますアプリケーションがすべてのタイムゾーンで同じ日付と時刻を表示し、日付と時刻を表示する必要があるという要件は、サーバーの応答からの日時に等しい必要があります。例えば、アプリケーションが "2016-09-28T16:51:15.000 + 0700"を受け取った場合、それは常に9/28/2016、4:51 PMと表示されます。どうしたらいいですか?日付と時刻の応答形式を変更せずに達成することは可能ですか?

+0

を使用して、たとえば、それを切り取った文字列のすべてが同じタイムゾーン(0700)になりますか、彼らがすることができます別のタイムゾーンにいる?異なる場合は、それらはすべて同じフォーマットになりますか? – rmaddy

+0

異なるタイムゾーンに置くことはできますが、常に同じ形式になっています。 – Ztr

答えて

1

あなたが本当に受け取った文字列にタイムゾーン情報を無視したい場合は、正規表現に

NSString *dateString = @"2016-09-28T16:51:15.000+0700"; 
NSString *truncatedDateString = [dateString stringByReplacingOccurrencesOfString:@"\\.\\d+(\\+|-)\\d+" 
                     withString:@"" 
                     options:NSRegularExpressionSearch 
                      range:NSMakeRange(0, dateString.length)]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss"; 

NSDate* date = [dateFormatter dateFromString:truncatedDateString]; 
dateFormatter.dateFormat = @"M/d/yyyy h:mm a"; 
NSString *finalDateString = [dateFormatter stringFromDate: date]; 
NSLog(@"%@", finalDateString); // 9/28/2016 4:51 PM 
関連する問題