Ios 如何从单个文本文件中提取不同语言的日期?

Ios 如何从单个文本文件中提取不同语言的日期?,ios,objective-c,localization,logic,nsdate,Ios,Objective C,Localization,Logic,Nsdate,我有一个文本文件,其中包含可通过“Added on”区分的信息块。每个有意义的字符串体由分隔(稍后我使用核心数据将它们持久化到磁盘) 我正在将它们保存到NSString文件的临时NSArray中,如下所示: NSURL *url = [self urlOfResource:@"List" withExrension:@"txt"]; NSError *error = error; NSString *originalContent = [NSString stringWithContentsO

我有一个文本文件,其中包含可通过“Added on”区分的信息块。每个有意义的字符串体由
分隔(稍后我使用核心数据将它们持久化到磁盘)

我正在将它们保存到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循环,我根据添加的日期(属于同一文本文件中的每个离散文本体)分离相关内容

问题是文本文件包含6种以上的语言。i、 e:

中文:添加于2015年12月25日星期五20:12:36

俄文:Ббббббббббббббббб107。夫0:16:45

德语:Hinzugefügt am Samstag,26岁。Dezember 2015 11:02:51

日语:作成日: 2015年12月26日土曜日 11:32:45

葡萄牙语:阿迪西奥纳多:萨巴多,26 de dezembro de 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 华兹华斯[872:32957]stringDateFromDetector:11:32:45

俄文:原始字符串:Сбббббббб,26бббббббб。в 解析后的0:16:37:value:{96,7}{2015-12-2518:46:37+0000}2015-12-26 18:19:44.054华兹华斯[872:32957]stringDateFromDetector:0:16:37

德语:原始字符串:Hinzugefügt am Samstag,26岁。Dezember 2015 11:02:51 解析后:{65, 38}{2015-12-26 05:32:51 +0000} 2015-12-26 18:19:44.218 华兹华斯[872:32957]stringDateFromDetector:我是Samstag,26岁。 Dezember 2015 11:02:51

使用:

上面的代码打印并匹配

2015-12-25 19:12:36+0000
2015-12-26 10:32:45+0000

这正是你想要和需要的

但要注意打印语句-展开时用力过大

下面是一个屏幕截图,演示了对不同日期的解析:


感谢您向我介绍这个神奇的api。我实现了它。它能识别除俄语、日语和汉语以外的大部分语言。在俄语中,它只识别时间,不识别日期。我的问题是,既然现在我可以从NSDataDetector返回的NSRange中获取日期,我将如何使用DateFormatter格式化日期(而不是英文)。@Napier您无法解析某些语言???我可以解析到目前为止我尝试过的每个人!关于如何用特定的语言重新格式化这些内容,我不得不说,这是一个完全不同的问题。我甚至不知道你想要什么作为输出。但是,您可以自由地首先合并对日期的解析,然后提出一个新的问题,您可以尝试使用不同的格式显示不同的日期。您可以设置NSDateFormatter的
区域设置
。@Napier我添加了一个屏幕截图,您可以看到我成功地解析了俄语、日语和汉语。我已经编辑了我的帖子。在文章的底部,你可以看到,对于日语和俄语,返回的范围并不是日期,而是时间。对于德语,{65,38}范围显然包含原始字符串中的日期和时间。@Napier是的,但您需要该范围做什么?您的问题是
如何提取日期
,这很容易用我的代码完成-您现在问的是完全不同的问题。请提出一个不同的问题,并在这里非常清楚地说明你到目前为止拥有什么以及你想要得到什么。现在请接受(+向上投票)我的回答,因为它解决了最初的问题。
    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];
}
let string = "English: Added on Friday, 25 December 2015 20:12:36 ----  作成日: 2015年12月26日土曜日 11:32:45"
let types: NSTextCheckingType = [.Date]
let detector = try? NSDataDetector(types: types.rawValue)

detector?.enumerateMatchesInString(string, options: [], range: NSMakeRange(0, (string as NSString).length)) { (result, flags, _) in
    print(result!.date!)
}