在iPhone中将多重date格式转换为单一格式

我从html源代码生成PDF。 我逐行阅读所有的文字。 我需要从整个文档中获取所有的date。 我确实使用正则expression式来获取所有的date。 问题是我需要将可以在任何date格式(dd-MM-yyyy或yyyy-mm-dd或dd / mm / yyyy)的string转换为特定的date格式(dd MMMM yyyy)。 我坚持这一点。 任何帮助将是伟大的。 我需要阅读包含的date格式string。 这是我的代码…

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); } } 

没有直接的方法来获得这个。 然而,这样的工作在大多数情况下都是可行的。 你所要做的就是将所有可能的date格式化程序添加到下面的dateFormatterList

 - (NSString *)dateStringFromString:(NSString *)sourceString destinationFormat:(NSString *)destinationFormat { NSString *convertedDateString = nil; NSArray *dateFormatterList = [NSArray arrayWithObjects:@"yyyy-MM-dd'T'HH:mm:ss'Z'", @"yyyy-MM-dd'T'HH:mm:ssZ", @"yyyy-MM-dd'T'HH:mm:ss", @"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", @"yyyy-MM-dd'T'HH:mm:ss.SSSZ", @"yyyy-MM-dd HH:mm:ss", @"MM/dd/yyyy HH:mm:ss", @"MM/dd/yyyy'T'HH:mm:ss.SSS'Z'", @"MM/dd/yyyy'T'HH:mm:ss.SSSZ", @"MM/dd/yyyy'T'HH:mm:ss.SSS", @"MM/dd/yyyy'T'HH:mm:ssZ", @"MM/dd/yyyy'T'HH:mm:ss", @"yyyy:MM:dd HH:mm:ss", @"yyyyMMdd", @"dd-MM-yyyy", @"dd/MM/yyyy", @"yyyy-MM-dd", @"yyyy/MM/dd", @"dd MMMM yyyy", @"MMddyyyy", @"MM/dd/yyyy", @"MM-dd-yyyy", @"d'st' MMMM yyyy", @"d'nd' MMMM yyyy", @"d'rd' MMMM yyyy", @"d'th' MMMM yyyy", @"d'st' MMM yyyy", @"d'nd' MMM yyyy", @"d'rd' MMM yyyy", @"d'th' MMM yyyy", @"d'st' MMMM", @"d'nd' MMMM", @"d'rd' MMMM", @"d'th' MMMM", @"d'st' MMM", @"d'nd' MMM", @"d'rd' MMM", @"d'th' MMM", @"MMMM, yyyy", @"MMMM yyyy", nil]; //sourceString = @"20/11/2012"; //destinationFormat = @"dd MMMM yyyy"; if (sourceString) { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; for (NSString *dateFormatterString in dateFormatterList) { [dateFormatter setDateFormat:dateFormatterString]; NSDate *originalDate = [dateFormatter dateFromString:sourceString]; if (originalDate) { [dateFormatter setDateFormat:destinationFormat]; convertedDateString = [dateFormatter stringFromDate:originalDate]; NSLog(@"Converted date String is %@", convertedDateString); break; } } [dateFormatter release]; } return convertedDateString; } 

把这个添加到你的课堂上,

 NSLog(@"%@", [self dateStringFromString:@"2nd August 2012" destinationFormat:@"dd-MM-yyyy"]); 

产出: 02-08-2012

Javascript可以做一个很棒的工作,现在你可以从Swift中调用它了! (我确定Objective C也是)

例:

 import JavaScriptCore let context = JSContext() let result: JSValue = context.evaluateScript("Date.parse('2016/5/6')") let date: NSDate = result.toDate() 

繁荣! …以及从variables传入date的示例:

 let randomFormatDate = "2016-05-06" let jsDate = context.evaluateScript("Date.parse('\(randomFormatDate)')") let cleanDate = jsDate.toDate()