2011-05-29 99 views
2

我想从NSString转换为NSDate使用getObjectValue:forString:range:error:。该函数返回成功并且没有错误,但返回的日期不正确。NSDateFormatter - getObjectValue:forString:范围:错误:返回不正确的日期

具体而言,我将@"1989-12-31T00:00:00+00:00"传递给下面的函数,返回的日期是1970-01-01 00:00:000 +0000。有什么想法吗?

+ (NSDate *) convertStringToDate:(NSString *) dateString 
{ 
    NSDate* date = nil; 
    NSError* error = nil; 
    NSRange range = NSMakeRange(0, [dateString length]); 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
    BOOL success = [dateFormatter getObjectValue:&date forString:dateString range:&range error:&error]; 
    [dateFormatter release]; 

    return success ? date : nil; 
} 

在此先感谢。

回答

0
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:locale]; 
[dateFormatter setLocale:usLocale]; 
[usLocale release]; 
[dateFormatter setDateFormat:@"EEE, dd MMMM yyyy HH:mm:ss Z"]; 
NSDate *date = [dateFormatter dateFromString:dateString]; 

注:

  • 获取语言环境NSLocale初始化从你得到这个日期,如RSS饲料或类似的来源。
  • setDateFormate:调整为源的格式。
+0

感谢您的回复。这个解决方案的问题是(1)我不能保证日期的格式(所以我相信我必须使用getObjectValue:forString:range:error :)。 (2)在问题中显示的示例中,如果我想明确设置日期格式,则必须删除dateString中的最后一个“:”。 NSDateFormat似乎并不期望最后的“:”。这可能是一个错误。 – 2011-05-29 14:46:36

+0

@Tolu Fapohunda关于2.我认为有修饰符的组合允许这样做。文档并不是非常简单,所以只需要很少的实验。 – TheBlack 2011-05-29 21:03:39