2010-11-29 35 views
1

输入字符串为“20100908041312”转换的Adobe PDF日期字符串的NSDate

格式是年,月,日,时,分,秒,时区

,我已经奔试图将其转换以NSDate与此:@"yyyyMMddHHmmsszz"

但NSDate是零,任何人看到我做错了什么?

-(NSDate*)convertPDFDateStringAsDate:(NSString*) _string{ 

    //20100908041312 
    //year month day Hours minutes seconds and time zone 

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"yyyyMMddHHmmsszz"]; 
    NSDate *date = [dateFormat dateFromString:_string]; 
    //date is nil... 
    [dateFormat release]; 

    return date; 
} 

编辑:其时区打破它

EDIT2:@"yyyyMMddHHmmssTZD"停止它返回nil,但dosnt挑时间区域中正确

EDIT3:这是我最终使用的代码。 ..i发现格式从PDF更改为PDF,因此代码处理我发现的变化,在某些情况下,此不会正确提取时区。

-(NSDate*)convertPDFDateStringAsDate:(NSString*) _string{ 

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 

    NSString * formatCheck = [_string substringToIndex:2]; 

    if(![formatCheck isEqualToString:@"D:"]) 
    { 
     NSLog(@"ERROR: Date String wasnt in expected format"); 
     return nil;//return [NSDate date]; 
    } 

    NSString * extract = [_string substringFromIndex:2];  

    //NSLog(@"DATESTRING:'%@'",extract);NSLog(@"DATELENGTH:%i",[extract length]); 

    if([extract length]>14) 
    { 
     [dateFormat setDateFormat:@"yyyyMMddHHmmssTZD"]; 
    } 
    else 
    { 
     [dateFormat setDateFormat:@"yyyyMMddHHmmss"]; 
    } 
    NSDate * date = [dateFormat dateFromString:extract]; 
    [dateFormat release]; 

    return date ; 
} 
+2

D'oh!我没有做任何研究! :) – 2010-11-29 12:03:37

+0

无论如何,这是非常感谢:) – 2010-11-29 12:09:11

回答

1

我承认帖子是超过一年老,但没有时间为更好的答案为时已晚。

既然你指定的输入字符串是Adobe PDF日期字符串,那么格式应符合PDF规范,每个产品的规格有:YYYYMMDDHHmmSSOHH'mm(省略前缀d :)。

请注意,您的输入字符串长度为14个字符,而您的NSDate格式长度为16个字符,因此所述时区不在您输入的字符串中。

然而,真正的回答你的问题是使用石英2D CGPDFString功能:
 
CFDateRef CGPDFStringCopyDate (CGPDFStringRef string );

该函数返回一个CFDateRef其中有一个免费电话桥NSDate的,所以你可以将从PDF中读取的日期传递给此函数,并通过投射轻松取回NSDate。

1

“12”不是任何Unicode日期格式模式的有效时区,所以NSDateFormatter不返回任何内容。 http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

您可能必须使用除最后两位数以外的所有数字,然后通过将Adobe的两位数号码转换为适当的时区来设置新NSDate对象的时区。

+0

干杯,现在的工作 – 2010-11-29 12:03:33

2

应该遵循的setDateFormat Unicode标准:http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

您应该能够设置时区是这样的:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyyMMddHHmmss"]; 
//Optionally for time zone conversations 
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]]; 

亚历