0

我的应用程序具有相对简单的模型(继承自现有网站的模型)。

该模型的属性之一是date。不幸的是,这个属性的值是非常自由的形式和类型String。我的意思是,价值观是这样的:

  • “1888 年 6 月,阿尔勒”
  • “约 1530”
  • “1634-37”
  • “1508”

有没有办法构建一个谓词,允许我将这些值转换为整数值,以便我可以对date属性的值执行搜索?

目前我正在使用简单的方法:

NSString *format = @"date contains[cd] %i";
NSPredicate *predicate = [NSPredicate predicateWithFormat:format, year];

但它不允许我找到两个给定日期之间的所有内容。

4

2 回答 2

1

将 NSPredicate 与正则表达式结合使用。这是一个链接。使用 regex 搜索 4 位数字 NSPredicate 和 Regex

于 2013-07-01T13:22:03.543 回答
1

你……这里可能有问题。任何日期都可以转换为整数值,并且如果您知道要使用什么格式,则可以NSDateFormatter很好地解析日期。您似乎有多种非常不同的格式,因此您不会通过简单的转换或搜索来获取日期字符串的整数值。

只找到一个四位数的年份会很容易,但是您的“1634-37”示例会打破这个想法。如果您的搜索是 1636,它应该匹配,但它不会没有一些额外的帮助。如果您可以接受一定的误差范围,您可能不会在意——只需调用 1634 即可。如果不是,首先您需要一个日期范围(最小 1634,最大 1637)而不是单个日期,其次,您需要一些方法来实现“-37”应该应用于“16” . 祝你好运,因为这正在迅速成为一个复杂的问题。

如果只有几种可能的日期格式,您可以为每种格式提供一个解析器,然后使用正则表达式匹配或反复试验来为字符串选择解析器。但是,如果有很多格式,那您就搞砸了。您最好手动编辑数据,以您的应用程序可以理解的首选格式输入日期。最终,这实际上取决于您需要如何准确地使用数据以及您可以在结果中容忍多少错误。

稍微单独说明一下,如果是我,我想在从 Web 服务器接收数据时将这些转换为数值。然后在进行提取时,我可以在谓词中使用数字匹配来快速获得结果。匹配字符串——特别是如果你需要使用正则表达式——与数字比较相比非常慢。

于 2013-07-01T17:12:07.417 回答