NSDate,时区和Unix时间戳混淆

时间:2019-04-02 14:20:11

标签: ios objective-c nsdate unix-timestamp

我接管了一些程序员的项目,不幸的是,他们在代码中留下了很多不清楚的地方。基本上,我们将一些航班事件以及起飞和到达时间存储在我们的数据库中。数据库(据我们所知)一切都存储在UTC中(应有的话),在iOS应用中,他们使用一些Realm对象作为数据库模型。

我基本上想在24小时内查找所有航班,对应于用户设备的24小时工作日。

- (NSDate *)beginningOfDayInDeviceTimeZone {
    NSDateComponents *components = [[NSDateComponents alloc] init];
    components.day = [[NSCalendar currentCalendar] ordinalityOfUnit:(NSCalendarUnitDay) inUnit:(NSCalendarUnitEra) forDate:self];
    return [[NSCalendar currentCalendar] dateFromComponents:components];
}

- (NSDate *)endOfDayInDeviceTimeZone {
    NSDateComponents *components = [[NSDateComponents alloc] init];
    components.day = [[NSCalendar currentCalendar] ordinalityOfUnit:(NSCalendarUnitDay) inUnit:(NSCalendarUnitEra) forDate:self];
    components.day += 1;
    return [[NSCalendar currentCalendar] dateFromComponents:components];
}

据我了解,所有时间通常都是Unix时间戳。因此,只有在我想显示时间时才需要时间转换。但是我认为我们的程序员搞砸了,但这是另一回事了。

我想查询此时间范围内的所有事件。我想使用我们的程序员创建的方法:

+ (NSMutableArray *)getDataForUser:(NSString *)userEmail betweenStartDate:(NSDate *)startDate andEndDate:(NSDate *)endDate {
    NSMutableArray *planDataArray = [NSMutableArray array];

    NSLog(@"startDate %@ endDate: %@", startDate, endDate);
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"userEmail == %@ AND (destinationTime >= %@ AND departureTime <= %@)",userEmail, startDate, endDate, startDate, endDate, startDate];
    NSLog(@"Predicate: %@", predicate); sortedResultsUsingProperty:@"departureTime" ascending:YES];

    if (results.count > 0) {
        for (FMPlanData *planData in results) {
            if (![planData isInvalidated]) {
                [planDataArray addObject:planData];
            }
        }
    }
    return planDataArray;
}

这是我的问题:

  1. 为什么给谓词方法分配的参数(startDate和endDate)比谓词字符串中的%@多?这是做什么的?

  2. NSLogs来自我。现在,一个特定呼叫的输出为:

  

2019-04-02 16:17:07.849451 + 0200 FollowMe [4891:158214] StartDate Tue Apr 2 2019年2月00:00:00
  2019-04-02 16:17:07.849666 + 0200 FollowMe [4891:158214] EndDate:Wed Apr 3 30:00:00 2019
  2019-04-02 16:17:07.849870 + 0200 FollowMe [4891:158214]谓词:userEmail ==“ xxx” AND destinationTime> = CAST(575848800.000000,“ NSDate”)AND离职时间<= CAST(575935200.000000,“ NSDate”)

好,在这里我很困惑。首先,向我显示了太多错误的事件。但是我最困惑的是这些CAST(...)时间戳。如果将575935200.000000转换为正常日期,我将在1988年4月1日得到。我的思想错误在哪里?

0 个答案:

没有答案