NSDateFormatter与月份的解析日期字符串从0开始

时间:2014-12-06 16:14:36

标签: objective-c cocoa date nsdateformatter

我无法解析这个日期字符串:@“2002 0 20”,其中0是1月(第一个月是0,不是1)。 我可以使用NSDateFormatter来解析此字符串吗?

这里http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Parsing_Dates_Times我读过那个月应该从1开始。

更新 我需要这个格式化器,因为我有这种格式的大量数据(它不是我的数据)。

在没有创建子类和重写格式方法的情况下,我找不到NSDateFormatter的任何解决方案。 我不使用NSScan,,因为它是一个太复杂的解决方案,但我认为@Andy是对的。

我使用此代码来解析字符串:

- (BOOL)getObjectValue:(out __autoreleasing id *)obj forString:(NSString *)string range:

(inout NSRange *)rangep error:(out NSError *__autoreleasing *)error
{
    int year = 0;
    int month = -1;
    int day = -1;

    int coutRead = sscanf([string cStringUsingEncoding:NSUTF8StringEncoding], "Date.UTC(%i, %i, %i)", &year, &month, &day);

    BOOL result = NO;
    if (coutRead == 3)
    {
        NSDateComponents* components = [[NSDateComponents alloc] init];
        components.year = year;
        components.month = month + 1;
        components.day = day;

        *obj = [self.calendar dateFromComponents:components];

        result = YES;
    }
    else
    {
        obj = 0;
        *rangep = NSMakeRange(NSNotFound, 0);
        result = NO;
    }

    return result;
}

2 个答案:

答案 0 :(得分:3)

试试这个:

NSDateFormatter* formatter = [NSDateFormatter new];
formatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
formatter.shortMonthSymbols = @[@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", @"10", @"11"];
formatter.dateFormat = @"yyyy MMM dd";  // Note 3 Ms for "short month" format
NSDate* theDate = [formatter dateFromString:@"2002 0 20"];

结果:

2002-01-20 00:00:00 +0000

答案 1 :(得分:1)

不,你不能。手动解析。

随时为您服务:

  1. 你有NSString可以使用自定义分隔符在你的情况下使用自定义分隔符,子空间数组分割字符串。例如:

    -(NSArray*)componentsSeparatedByString:(NSString *)separator
    
  2. NSScanner可用于直接从字符串中读取整数。

  3. 文档简单而全面。