首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSDate无时间核心数据组

NSDate无时间核心数据组
EN

Stack Overflow用户
提问于 2021-11-11 06:33:04
回答 1查看 84关注 0票数 0

我在核心数据中有开始日期属性,并且我想根据startDate获取与分组一起的项,

但是startDate基本上有timeComponent,但是我希望分组是基于yyyy的,

,这是我使用的代码

代码语言:javascript
运行
复制
    NSError *error = nil;
    NSFetchRequest *request = [NSFetchRequest new];
    NSManagedObjectContext *context = self.managedObjectContext;
    request.entity = [CalendarItem entityInManagedObjectContext:context];
    NSExpression *startExpr = [NSExpression expressionForKeyPath:@"start"];
    NSExpression *countExpr = [NSExpression expressionForFunction:@"count:" arguments:[NSArray arrayWithObject:startExpr]];
    NSExpressionDescription *exprDesc = [[NSExpressionDescription alloc] init];
    [exprDesc setExpression:countExpr];
    [exprDesc setExpressionResultType:NSInteger64AttributeType];
    [exprDesc setName:@"count"];
    
    [request setPropertiesToGroupBy:@[@"start"]];
    [request setPropertiesToFetch:[NSArray arrayWithObjects:@"start", exprDesc, nil]];
    [request setResultType:NSDictionaryResultType];
    NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];

,这是我得到的输出:

代码语言:javascript
运行
复制
Printing description of results:
<_PFArray 0x600001e3a700>(
{
    count = 1;
    start = "2021-09-14 03:30:00 +0000";
},
{
    count = 1;
    start = "2021-09-14 04:00:00 +0000";
},
{
    count = 1;
    start = "2021-09-16 09:30:00 +0000";
},
{
    count = 1;
    start = "2021-11-11 00:00:00 +0000";
},
{
    count = 1;
    start = "2021-11-11 04:00:00 +0000";
},
{
    count = 1;
    start = "2021-11-11 06:00:00 +0000";
},
{
    count = 1;
    start = "2021-11-12 00:00:00 +0000";
}
)

预期结果:

代码语言:javascript
运行
复制
{
    count = 2
    start = 2021-09-14
}
{
    count = 1
    start = 2021-09-16
}
{
    count = 3
    start = 2021-11-11
}
{
    count = 1;
    start = "2021-11-12
}
EN

回答 1

Stack Overflow用户

发布于 2021-11-12 18:10:12

您已经发现,核心数据“日期”属性实际上是时间戳。它们包括一天中的时间,尽管它们被称为“日期”。您不能告诉Core数据只使用日期属性值的一部分--它要么全部要么什么都不使用。

要获得所需的分组类型,需要创建另一个属性,其中的值仅为所需的值,而不是包含不需要的额外细节的时间戳。在这里,这将是一个时间、分钟和秒都设置为零的日期,这样这些细节不会影响分组。

一种方法是使用该更改创建一个新的日期对象,并将其保存在一个新属性中。你可以叫它trimmedDate。然后,无论何时在实例上设置日期,也可以使用代码设置trimmedDate,如下所示

代码语言:javascript
运行
复制
NSDate *trimmed = [[NSCalendar currentCalendar] dateBySettingHour:0 minute:0 second:0 ofDate:date options:0];

然后使用这个新值进行分组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69924077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档