【问题标题】:Objective C Calculate Amount of Time Between Now and 3:00Objective C 计算从现在到 3:00 之间的时间量
【发布时间】:2015-11-18 06:36:49
【问题描述】:

我正在制作一个在学校使用的应用程序,我想制作一个倒数计时器来倒计时从现在到放学之间的时间,对我来说是 3:00。例如,在 11:15,它将显示为 3:45。 到目前为止,我已经弄清楚如何制作倒数计时器,并且我有以下代码:countdownTimer.text = [Formatter stringFromDate: [NSDate date]]; 这段代码实际上还没有工作,但我认为如果我弄清楚如何从设定的时间中减去当前时间然后使用date所在的值,它会起作用,但是我愿意接受其他关于如何解决问题。

【问题讨论】:

标签: ios objective-c nsdate nstimer


【解决方案1】:

您可以使用NSCalendar方法dateBySettingHour:minute:second:获取与今天下午3点关联的NSDate对象:

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDate *schoolOut = [calendar dateBySettingHour:15 minute:0 second:0 ofDate:now options:0];

有很多不同的方法可以获取与今天下午 3 点关联的 NSDate 对象,但以上只是一个示例。您也可以使用NSCalendarcomponents:fromDate 提取nowNSDateComponents,然后调整hourminutesecond,然后使用dateFromComponents 创建一个新的NSDate 对象(也是NSCalendar 方法)。

无论如何,一旦您有一个代表您的目标日期/时间的NSDate 对象,您就可以使用NSDateComponentsFormatter 以一种很好的格式显示两个日期之间的时间间隔。

NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
formatter.allowedUnits = NSCalendarUnitHour | NSCalendarUnitMinute;
formatter.unitsStyle = NSDateComponentsFormatterUnitsStyleFull;
formatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorPad;

NSString *string = [formatter stringFromDate:now toDate:schoolOut];

您可以调整unitsStylezeroFormattingBehavior来调整字符串的格式。

【讨论】:

  • 非常感谢!它工作得很好。不过,我有一个轻微的后续问题。它显示计时器,如“X 小时 Y 分钟”(中午会显示“3 小时 0 分钟”)。我对Objective C非常陌生,并且不熟悉NSDateComponentsFormatter,所以我想知道是否可以将其格式化为更像常规时钟(hh:mm:ss),包括秒?如果没有,它仍然可以正常工作。谢谢!
  • @willhunter2 - 更改unitsStyleNSDateComponentsFormatterUnitsStylePositional 的默认值应该会产生您要查找的内容。见developer.apple.com/library/prerelease/ios/documentation/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
相关资源
最近更新 更多