输入字符串为“20100908041312”
格式为年,月,日,小时,分钟,秒,时区
并且我一直在尝试将其转换为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,但不正确选择时区EDIT3:这是我最后使用的代码...我发现格式从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 ;
}
最佳答案
我知道发布已经有一年了,但是没有时间来找一个更好的答案了。
由于您指定输入字符串为Adobe PDF日期字符串,因此格式应符合PDF规范,每个规范为: YYYYMMDDHHmmSSOHH'mm (省略前缀D :)。
请注意,您输入的字符串长度为14个字符,而NSDate格式的长度为16个字符,因此时区不在您指定的输入字符串中。
尽管如此,您问题的真正答案是使用 Quartz 2D CGPDFString 函数:CFDateRef CGPDFStringCopyDate (CGPDFStringRef string
);
该函数返回一个CFDateRef,它具有到NSDate的免费桥接,因此您可以将从PDF读取的日期传递给此函数,并通过强制转换轻松地返回NSDate。
关于iphone - 将Adobe PDF日期字符串转换为NSDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4303394/