NSDate未正确返回

时间:2015-10-06 23:04:33

标签: objective-c

目前我正在尝试在我的应用和我的应用中设置一个激活

将设定的小时和分钟设置为当前年度的方法

- (NSDate *)timeAsDate {

  NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
  dateComponents.hour = self.hour;
  dateComponents.minute = self.minute;

  NSLog(@"HOUR %ld, MINUTE %ld", (long)dateComponents.hour,    
 (long)dateComponents.minute);
  // Output HOUR 16, MINUTE 1
  return [[NSCalendar currentCalendar]   dateFromComponents:dateComponents];
}

消防日期方法

  self.notif.fireDate = [self.time timeAsDate];
  NSLog(@"Alarm: %@", [self.time timeAsDate]);

  // Output
  Alarm: 0001-01-01 23:53:58 +0000

我想弄清楚为什么timeAsDate没有正确返回。

2 个答案:

答案 0 :(得分:0)

在swift:

func timeAsDate(hour: Int, minute: Int) -> NSDate {
    let calendar = NSCalendar.currentCalendar()
    return calendar.dateBySettingHour(hour, minute: minute, second: 0, ofDate: NSDate(), options: .MatchNextTime)!
}

timeAsDate(21, minute: 30) // today at 9:30 pm
timeAsDate(6, minute: 45)  // today at 6:45 am

在Objective-C

NSDate *timeAsDate(NSInteger hour, NSInteger minute) {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    return [calendar dateBySettingHour:hour minute: minute second: 0 ofDate: [NSDate date] options: NSCalendarOptionsMatchNextTime];
}

timeAsDate(21, 30) // today at 9:30 pm
timeAsDate(6, 45) // today at 6:45 am

答案 1 :(得分:-1)

如果您尝试返回 a NSDate,可以采用一种方便的方法:

NSDate *today = [NSDate date];

只要您想要访问今天的日期,就可以调用它。我不确定你的方法timeAsDate的目的是什么?

您不想使用NSDateComponentsNSDateFormatter,除非您想要操纵日期的,或者读取NSDate的特定方面{1}}价值。这是因为NSDate实际上是自1970年以来一直在运行的计数秒。这对大多数人来说非常混乱,但HERE是一个很棒的NSDate快捷指南。

您当前的代码正在构建一个日期(请参阅我的链接)您要访问当前日期的目的是调用方便方法[NSDate date],该方法返回Number自1970年以来的秒数 - 也称为Epoch或Unix时间戳。

对于格式化和解析,请结帐this

祝你好运,我希望这对你有所帮助!

编辑 - 添加图像

我不确定你的“被炒作”是什么,但如果你想在将来做某事,在“今天”之后的一段特定时间..那么我相信这应该有所帮助:

enter image description here

忽略对 TimeAfterTime 程序的引用。相反,请查看未来日期调用的假设情景!这只是谷歌上this开发指南书的屏幕截图。