= CAST(460249200.000000-6ren">
gpt4 book ai didi

swift - NSFetchRequest 按日期

转载 作者:行者123 更新时间:2023-11-30 10:13:11 25 4
gpt4 key购买 nike

我有下面的方法,我通过 NSDate() 来获取今天的所有结果。我试图在午夜到午夜之前得到结果,但似乎不起作用。我注意到我的谓词输出如下:

"date >= CAST(460249200.000000, "NSDate") AND date <= CAST(460289100.000000, "NSDate")"我认为 460249200.000000 是一个 unix 时间戳,但如果我看一下,日期是正确的,但年份是1984 年?

func GetAll(dayOfRecords: NSDate) -> NSArray {


var calendar = NSCalendar.currentCalendar()
var components = calendar.components(.CalendarUnitMonth | .CalendarUnitDay | .CalendarUnitYear, fromDate: dayOfRecords);
var midnightComponents = NSDateComponents();
midnightComponents.day = components.day;
midnightComponents.month = components.month;
midnightComponents.year = 2015;
midnightComponents.hour = 0;

var midnightDate = calendar.dateFromComponents(midnightComponents);

var twentyFourHoursLater = NSDateComponents();
twentyFourHoursLater.day = components.day;
twentyFourHoursLater.month = components.month;
twentyFourHoursLater.year = 2015;
twentyFourHoursLater.hour = 11;
twentyFourHoursLater.minute = 59;

var twentyFourHoursAhead = calendar.dateFromComponents(twentyFourHoursLater);


var predicate = NSPredicate(format: "(date >= %@) AND (date <= %@)", midnightDate!, twentyFourHoursAhead!);
var fetchRequest = NSFetchRequest(entityName: "Movement")
//filter seems to get 1987!!!??? fetchRequest.predicate = predicate;
fetchRequest.predicate = predicate;
var results:NSArray = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil)!

return results;
}

最佳答案

对于日期属性,核心数据存储自2001 年 1 月 1 日,SQLite 数据库中的 GMT,即 NSDate属性 timeIntervalSinceReferenceDate 返回。

let date = NSDate(timeIntervalSinceReferenceDate: 460249200.0)

您可以验证 SQLite 查询中的第一个时间戳是2015-08-02 23:00:00 +0000,即 2015-08-03 00:00:00GMT+1 时区。

因此,您的开始日期已正确设置为 8 月 3 日午夜。但结束日期设置为同一天 11:59,即(大约)中午,而不是 24 小时后。您可能想要设置它至 23:59,或最好至次日 00:00。

这可以简化为

let calendar = NSCalendar.currentCalendar()
let startDate = calendar.startOfDayForDate(dayOfRecords)
let endDate = calendar.dateByAddingUnit(.CalendarUnitDay, value: 1, toDate: startDate, options: nil)!

let predicate = NSPredicate(format: "(date >= %@) AND (date < %@)", startDate, endDate);

关于swift - NSFetchRequest 按日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31782938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com