【问题标题】:How to make an int counter for the days如何为这些天制作一个 int 计数器
【发布时间】:2015-02-27 06:51:44
【问题描述】:

您将如何制作一个 int 变量,让我们说“计数器”,它在目标 C 中每天递增 1。在实现这一点时遇到困难,我在网上看到的大多数资源都建议在两个 NSDates 中找到差异但这不是我想要的。任何建议,请,谢谢。

【问题讨论】:

  • @OP : 你的应用是基于网络服务的吗?如果是,则从 web 服务获取当前和比较日期...
  • 您的问题(目前)得分为-2,这应该表明您需要改进。您能否详细说明您实际尝试实现的目标以及您尝试实现的目标?您是否尝试计算您的应用程序连续运行的连续 24 小时周期数?您是否正在尝试计算您的应用程序已运行的不同日历天数?等等。你说过你在实现你需要的东西时遇到了麻烦,但你没有展示你尝试过的任何东西。提供这些细节,也许有人可以提供帮助。 (编辑问题添加细节,不要放在cmets中)

标签: objective-c iphone xcode nsdate


【解决方案1】:

诀窍是从两个日期获取 NSDateComponents。假设您记录了startDate 应该在什么时候开始计日,那么...

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSDayCalendarUnit
                                           fromDate:startDate
                                             toDate:[NSDate date]  // this is "now"
                                            options:0];

会给你一个可以回答的日期组件对象......

NSInteger day = [components day];

startDate 和现在之间的天数。

【讨论】:

  • 取 [NSDate date] 不好,因为用户可以在他的设备中更改此日期。因此天数计算会出错。
  • 是的。我刚看到《星际穿越》,应该指出,这个解决方案在黑洞边缘附近也失败了。
【解决方案2】:

您可以按照下面提到的步骤找到您正在寻找的柜台

  1. 创建一个 NSDate 对象 currentDate
  2. [currentDate timeIntervalSince1970] 获取当前时间,这将返回自 1970 年以来 UTC 的当前时间,从而消除更改设备上的日期的任何影响,因为您不能落后于 1970 年。试过在我的 iPhone 上
  3. 将此时间保存在 NSUserDefaults 中作为您的 startTime 时间,如果您的应用程序进入后台或终止,这将很有帮助
  4. 使用 NSTimer scheduledTimerWithTimeInterval 函数安排一个 24 小时定时器,它会将计数器加一
  5. 计数器增加后,重新启动计时器,使其在 24 小时后再次更新计数器
  6. 如果您的应用程序因 NSTimer 停止而终止或变为非活动状态,您始终可以通过查找当前时间(按照步骤 #1 和 2)与您保存在 NSUserDefaults 和将其转换为天数,并相应地重置计时器,以便它可以相应地增加计数器

希望这能解决你的问题。

【讨论】:

  • (2) 如何消除更改设备日期的任何影响? (OP 没有提到推迟时间,但目前这两个答案似乎都认为这可能需要处理。)
  • (2) 是为了消除第一个答案中提到的使用 NSDate 时的日期更改效果。你是对的,OP 没有提到推迟时钟,但如果这个场景被覆盖会很好。
猜你喜欢
  • 1970-01-01
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
相关资源
最近更新 更多