gpt4 book ai didi

objective-c - 在 iPhone 中将多种日期格式转换为单一格式

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:23:24 26 4
gpt4 key购买 nike

我从 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);


}

}

最佳答案

没有直接的方法可以得到它。但是,在大多数情况下都可以使用这样的解决方法。您所要做的就是将所有可能的日期格式化程序添加到下面的 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

关于objective-c - 在 iPhone 中将多种日期格式转换为单一格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13116110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com