可能重复:
Converting an ISO 8601 timestamp into an NSDate: How does one deal with the UTC time offset?
我正在编写一个iPhone应用程序,它可以从Ruby on Rails Web服务中获取时间。 我从JSON响应获得的时间字符串具有以下格式。 “2012-12-01T01:01:00Z” 我想从此获得基于系统时区的时间。 我该怎么办?
答案 0 :(得分:1)
如果您需要在服务器和应用程序上匹配时间,则可以设置日期格式化程序的时区,用于将JSON日期字符串转换为NSDate,以便在从Web服务获取GMT时使用GMT。所以你的日期格式化程序应该像这样初始化:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss'Z'"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
然后从JSON获取日期字符串并使用它创建日期:
NSDate *dateFromServer = [dateFormatter dateFromString:[json valueForKey:@"created_at"]]
// Do something with dateFromServer like save it to CoreData
然后,稍后,当您想要显示该日期时,只需创建另一个日期格式化程序,以便在当地时间显示日期。 NSDate将默认为系统时区,它应显示正确的时间。
NSDateFormatter *displayDateFormatter = [[NSDateFormatter alloc] init];
[dispalyDateFormatter setDateFormat:@"MMM dd, YYYY"]; // ex. Jul 21, 2012
NSDate *dateFromCoreData = [managedObject valueForKey:@"CreatedAt"];
NSString *dateString = [displayDateFormatter stringFromDate:dateFromCoreData];
// Display your date string in a UILabel or Table View Cell, etc.
最好的问候。