将 Adobe PDF 日期字符串转换为 NSDate
Posted
技术标签:
【中文标题】将 Adobe PDF 日期字符串转换为 NSDate【英文标题】:Converting Adobe PDF date String to NSDate 【发布时间】:2011-05-17 05:55:17 【问题描述】:输入字符串是'20100908041312'
格式为年、月、日、时、分、秒、时区
我一直在尝试将其转换为 NSDate:@"yyyyMMddHHmmsszz"
但是 NSDate 是 nil,有人知道我做错了什么吗?
-(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 ;
【问题讨论】:
天啊!我做了所有这些研究都白费了! :) 【参考方案1】:它应该遵循 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:@"..."]];
亚历克斯
【讨论】:
您可能想看看可能的时区:developer.apple.com/library/mac/#documentation/CoreFoundation/…【参考方案2】:我知道该帖子已经发布了一年多,但现在给出更好的答案还为时不晚。
由于您指定输入字符串是 Adobe PDF 日期字符串,因此格式应符合 PDF 规范,根据规范为:YYYYMMDDHHmmSSOHH'mm(省略前缀 D:)。
请注意,您的输入字符串长度为 14 个字符,而您的 NSDate 格式长度为 16 个字符,因此时区不在您的输入字符串中。
不过,您问题的真正答案是使用 Quartz 2D CGPDFString 函数: CFDateRef CGPDFStringCopyDate (CGPDFStringRef string
);
该函数返回一个 CFDateRef,它具有到 NSDate 的免费桥接,因此您可以将从 PDF 读取的日期传递给该函数,并通过强制转换轻松取回 NSDate。
【讨论】:
【参考方案3】:“12”不是任何 Unicode 日期格式模式的有效时区,因此 NSDateFormatter 不返回任何内容。 http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns
您可能必须使用除最后两位以外的所有数字,然后通过将 Adobe 的两位数字转换为适当的时区来设置新 NSDate 对象的时区。
【讨论】:
以上是关于将 Adobe PDF 日期字符串转换为 NSDate的主要内容,如果未能解决你的问题,请参考以下文章
使用 DNS 记录将域指向 Adobe Business Catalyst 托管