NSDateFormatter,显示所有时区的相同日期

时间:2016-12-11 05:56:27

标签: ios objective-c nsdate nsdateformatter

在我的应用程序中,我从服务器接收日期作为字符串,例如" 2016-09-28T16:51:15.000 + 0700"。我使用NSDateFormatter获取NSDate:

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

另一个格式化程序从NSDate获取字符串以在UI中显示它

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

它正常工作并根据时区显示日期和时间,但现在我要求应用程序应显示所有时区的相同日期和时间,并且显示日期和时间应等于服务器响应的日期和时间。例如,如果应用程序收到" 2016-09-28T16:51:15.000 + 0700"然后它应该始终显示为9/28/2016,下午4:51。我该怎么做?可以在不改变日期和时间的响应格式的情况下实现它吗?

1 个答案:

答案 0 :(得分: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