我有一个文本文件,其中包含由“添加”区分的信息块。每个有意义的字符串都由########
分开(后来我用Core Data将它们保存到磁盘)。如何从单个文本文件中以不同语言提取日期?
我将它们保存到NSString的文件的临时的NSArray如下:
NSURL *url = [self urlOfResource:@"List" withExrension:@"txt"];
NSError *error = error;
NSString *originalContent = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
if (error) NSLog(@"ERROR READING CONTENT OF FILE: %@", error);
// separeting string and saving it to NSArray
NSArray *seperateStringBody = [originalContent componentsSeparatedByString:@"########"];
现在用for循环,我加入日期的基础上(属于文本的每一个独立体上分离相关内容在同一文本文件中)
for(NSString *body in seperateStringBody){
//I am showing only relevant code here
NSRange range = [removedNewLine rangeOfString:@"Added on "];
NSUInteger startRange = range.location+range.length;
NSString *dateString = [removedNewLine substringWithRange:NSMakeRange(startRange, removedNewLine.length-startRange)];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"EEEE, MMMM d, y hh:mm:ss a"];
NSDate *addedDate = [formatter dateFromString:dateString];
}
问题是文本文件包含超过6种语言。即:
英语:新增上周五,2015年12月25日20时十二分36秒
俄罗斯:Добавлено:суббота,26декабря2015年г. в0时16分45秒
德国:Hinzugefügt是Samstag,26 Dezember 2015年11点02分51秒
日本:作成日:2015年12月26日土曜日11时32分45秒
葡萄牙:Adicionado:sábado,26日dezembro日2015年11点39分53秒
正如你可以看到提取使用NSRange
是不是真的有帮助的日期字符串的硬编码方式。我只能想到利用“switch”语句来处理与文件内部语言数相等的情况。
是否有任何方便的方法来做到这一点?
编辑:1
当我使用NSDateDetector解析的NSDate。下面是结果:
日语:原始字符串:作成日:2015年12月26日土曜日11时32分45秒 解析后:值:{46, 8} {2015年12月26日18 :02:45 0000} 2015年12月26日18:19:44.538 WORDSWORTH [872:32957] stringDateFromDetector:11点32分45秒
俄语:原始字符串:Добавлено:суббота,26декабря2015г. 0:16:37解析后:值:{96,7} {2015-12-25 18:46:37 +0000} 2015-12-26 18:19:44.054 WordsWorth [872:32957] stringDateFromDetector: 〇点16分37秒
德国:原始字符串:Hinzugefügt是Samstag,26 Dezember 2015年11点02分51秒 解析后:{65,38 } {2015年12月26日5时32分51秒+0000 } 2015-12-26 18:19:44.218 WordsWorth [872:32957] stringDateFromDetector:am Samstag,26。 Dezember 2015 11时02分51秒
谢谢你把我介绍给这片神奇的API。我实现了它。它可以识别除俄语,日语和中文以外的大部分语言。在俄语中,它只识别时间,而不是日期。我的问题是,现在我可以从NSDataDetector返回的NSRange中获取日期,我将如何使用DateFormatter格式化日期(而不是英文)。 – Napier
@Napier你无法解析某些语言?我可以解析到目前为止我尝试过的所有人!关于如何用特定语言重新格式化这些 - 这是一个完全不同的问题,我不得不说。我甚至不知道你想在那里输出什么。但是随时可以首先将日期分析结合起来,然后提出一个新问题,试图以不同格式显示不同日期。你可以设置NSDateFormatter的'locale'。 – luk2302
@Napier我添加了一个截图,您可以看到我成功解析了俄语,日语和中文。 – luk2302