【问题标题】:Issue to get only time of NSDate and ignore date仅获取 NSDate 的时间并忽略日期的问题
【发布时间】:2017-06-11 05:41:30
【问题描述】:

我发现了很多类似我的问题,但我不明白为什么它不起作用。

我的核心数据数据库中有一个开放时间列表。 我想知道在给定日期它是打开还是关闭。

但我不想查看日期。仅显示小时、分钟和秒。

这里是我的对象的模型打开:

  • NSNumber * 天;
  • NSDate * 开始;
  • NSDate * 结束;

我的问题是从我的 NSDate 对象中提取时间后,我的时间总是比原始日期多 42 分 30 秒。

这是我的代码:

NSCalendar * calendar = [NSCalendar currentCalendar];
NSCalendarUnit flags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;

for (Opening * opening in openingsForDate) {

    NSDateComponents *date1Components = [calendar components:flags fromDate:date];
    NSDateComponents *date2Components = [calendar components:flags fromDate:opening.start];
    NSDateComponents *date3Components = [calendar components:flags fromDate:opening.end];

    NSDate *date1 = [calendar dateFromComponents:date1Components];
    NSDate *date2 = [calendar dateFromComponents:date2Components];
    NSDate *date3 = [calendar dateFromComponents:date3Components];

    NSLog(@"%@ => %@", date, date1);
    NSLog(@"%@ => %@", opening.start, date2);
    NSLog(@"%@ => %@", opening.end, date3);
}

这里是输出:

2017-01-25 22:10:41 +0000 => 0001-01-01 22:53:11 +0000
2017-01-25 11:00:00 +0000 => 0001-01-01 11:42:30 +0000
2017-01-25 22:00:00 +0000 => 0001-01-01 22:42:30 +0000

有什么想法吗? 谢谢。

编辑:找到解决方案here

【问题讨论】:

  • 我是否应该存储 NSNumber 而不是 NSDate。那么将小时、分钟和秒转换为 NSTimeInterval 并将其存储在我的核心数据数据库中吗?但是,我不明白为什么我还有 42 分 30 秒 ^^

标签: ios objective-c nsdate nsdatecomponents


【解决方案1】:

无需转换回 NSDate,只需使用 NSDateComponents 的小时、分钟和秒属性来计算从午夜开始的秒数。然后你可以只比较整数。

NSInteger compareSeconds = date1Components.second + (date1Components.minute*60) + (date1Components.hour*60*60);
NSInteger openingSeconds = date2Components.second + (date2Components.minute*60) + (date2Components.hour*60*60);
NSInteger closingSeconds = date3Components.second + (date3Components.minute*60) + (date3Components.hour*60*60);

if (openingSeconds<compareSeconds && closingSeconds>compareSeconds){
    // Open
} else {
    // Closed
}

【讨论】:

  • 无法正常工作。请参阅我的编辑。还是谢谢你:)
猜你喜欢
  • 1970-01-01
  • 2012-02-18
  • 2017-03-03
  • 1970-01-01
  • 2022-07-08
  • 2011-08-07
  • 2019-01-23
  • 2013-10-06
  • 1970-01-01
相关资源
最近更新 更多