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

标签 ios objective-c localization logic nsdate

我有一个文本文件,其中包含可通过“添加”区分的信息 block 。每个有意义的字符串主体都由 ######## 分隔(后来我使用 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 种语言。即:

English: Added on Friday, 25 December 2015 20:12:36

Russian: Добавлено: суббота, 26 декабря 2015 г. в 0:16:45

German: Hinzugefügt am Samstag, 26. Dezember 2015 11:02:51

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

Portuguese: Adicionado: sábado, 26 de dezembro de 2015 11:39:53

如您所见,使用 NSRange 提取日期字符串的硬编码方式并不是很有用。我只能考虑在大小写等于文件内语言数量的情况下使用“switch”语句。

有什么方便的方法吗?

编辑:1

当我使用 NSDateDetector 解析 NSDate 时。以下是结果:

Japanese: Original String: 作成日: 2015年12月26日土曜日 11:32:45 After Parsing: Values: {46, 8}{2015-12-26 18:02:45 +0000} 2015-12-26 18:19:44.538 WordsWorth[872:32957] stringDateFromDetector: 11:32:45

Russian: Original String: Добавлено: суббота, 26 декабря 2015 г. в 0:16:37 After Parsing: Values: {96, 7}{2015-12-25 18:46:37 +0000} 2015-12-26 18:19:44.054 WordsWorth[872:32957] stringDateFromDetector: 0:16:37

German: Original String:Hinzugefügt am Samstag, 26. Dezember 2015 11:02:51 After Parsing:{65, 38}{2015-12-26 05:32:51 +0000} 2015-12-26 18:19:44.218 WordsWorth[872:32957] stringDateFromDetector: am Samstag, 26. Dezember 2015 11:02:51

最佳答案

使用 NSDataDetector :

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

上面的代码打印并匹配

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

这正是您想要和需要的。

尽管如此,请注意打印语句 - 过度强制展开

下面是一个截图,展示了不同日期的解析:

enter image description here

关于ios - 如何从单个文本文件中提取不同语言的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34469826/

相关文章:

ios - 如何本地化应用程序图标?

iphone - iOS 中的本地 Assets URL 有多独特

ios - 如何在 UICollectionviewcontroller 中显示文本字段?

iphone - 如何测试本地化 "portuguese brazil"?

objective-c - 区分点击和滚动 - iOS

iphone - 如何为不同的按钮操作设置单一选择器 View

c# - 是否有一种方法可以在选择其他语言时获得自定义控件在VS编辑器中显示正确的语言

ios - Apple 是否允许使用套接字在两个 iOS 应用程序之间进行通信?

ios - 几秒钟后,Spotify音频播放器随机停止

ios - Facebook iOS sdk 好友列表返回空