【发布时间】:2012-10-29 05:03:29
【问题描述】:
我从 html 源代码生成 PDF。我逐行阅读所有文本。我需要从整个文档中获取所有日期。我确实使用正则表达式获取所有日期。问题是我需要将可以是任何日期格式(dd-MM-yyyy 或 yyyy-mm-dd 或 dd/mm/yyyy)的字符串转换为特定的日期格式(dd MMMM yyyy)。我被这个困住了。任何帮助都会很棒。我需要阅读包含的日期格式字符串。这是我的代码...
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileDocumentDirectorySavePath = [documentsDirectory stringByAppendingPathComponent:@"Sample.txt"];
NSFileManager *fm = [NSFileManager defaultManager];
if (![fm fileExistsAtPath:fileDocumentDirectorySavePath])
[fm copyItemAtPath:fileBundlePath toPath:fileDocumentDirectorySavePath error:nil];
NSString* fileContents =
[NSString stringWithContentsOfFile:fileDocumentDirectorySavePath
encoding:NSUTF8StringEncoding error:nil];
// first, separate by new line
NSArray* allLinedStrings =
[fileContents componentsSeparatedByCharactersInSet:
[NSCharacterSet newlineCharacterSet]];
NSString* strsInOneLine;
NSArray *DateArray;
// NSString * regularExpression = @"([1-9]|0[1-9]|[12][0-9]|3[01])(st|nd|rd|th) \\w* (19|20)\\d\\d |(\\d{2}-\\d{2}-\\d{4})|(\\d{4}-\\d{2}-\\d{2})|(\\d{2}/\\d{2}/\\d{4})|(\\d{4}/\\d{2}/\\d{2})";
NSString * regularExpression = @"([1-9]|0[1-9]|[12][0-9]|3[01])(st|nd|rd|th) \\w* (19|20)\\d\\d |(\\d{2}-\\d{2}-\\d{4})|(\\d{4}-\\d{2}-\\d{2})|(\\d{2}/\\d{2}/\\d{4})|(\\d{4}/\\d{2}/\\d{2})|((31(?!\\ (Feb(ruary)?|Apr(il)?|June?|(Sep(?=\\b|t)t?|Nov)(ember)?)))|((30|29)(?!\\ Feb(ruary)?))|(29(?=\\Feb(ruary)?\\ (((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))|(0?[1-9])|1\\d|2[0-8])\\ (Jan(uary)?|Feb(ruary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sep(?=\\b|t)t?|Nov|Dec)(ember)?)\\ ((1[6-9]|[2-9]\\d)\\d{2})";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regularExpression
options:NSRegularExpressionCaseInsensitive
error:&error];
NSString *resultString;
for (int i = 0; i < [allLinedStrings count]; i++) {
strsInOneLine = [allLinedStrings objectAtIndex:i];
DateArray = [regex matchesInString:strsInOneLine options:0 range:NSMakeRange(0, [strsInOneLine length])];
for (NSTextCheckingResult* result in DateArray)
{
resultString = [strsInOneLine substringWithRange:result.range];
NSLog(@"RESULT STRING ===== >%@",resultString);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
NSDate *yourDate = [dateFormatter dateFromString:resultString];
NSLog(@"NEW DATE ====== > %@",yourDate);
NSString *myDateStr;
[dateFormatter setDateFormat:@"dd MMMM yyyy"];
myDateStr = [dateFormatter stringFromDate:yourDate];
NSLog(@"NEW DATE STRING ====== > %@",myDateStr);
}
}
【问题讨论】:
-
它是否只包含这些(dd-MM-yyyy 或 yyyy-mm-dd 或 dd/mm/yyyy)3 种格式或其他任何内容?
-
@Vishy :共有 6 种日期格式(dd-mm-yyyy、dd/mm/yyyy、yyyy-mm-dd、yyyy/mm/dd、2012 年 7 月 2 日、2012 年 1 月 31 日) .我需要将所有这些都转换为一种日期格式,即 dd-mm-yy。
-
我认为你可以使用一系列 if 条件来实现这一点..
-
@user1448493,检查我发布的代码。检查是否有帮助。
-
@ACB 非常感谢 .. 效果很好。但是你能告诉我 2012 年 8 月 2 日的日期格式是什么吗??
标签: objective-c ios nsdateformatter