【问题标题】:XCODE: How to get/verify ACCURATE timestamp from deviceXCODE:如何从设备获取/验证准确的时间戳
【发布时间】:2012-05-24 23:29:13
【问题描述】:

是否可以在没有互联网连接的情况下获取 NTP 或准确的时间戳?我不能/不信任带有 [NSDate 日期] 的设备时间戳,因为它可以由用户修改,并且我的应用程序将通过修改系统日期和时间被黑客入侵。

除此之外,除了获取准确的时间戳之外,还有什么方法可以检查系统日期是否已被用户更改或未设置为“自动”。

感谢和问候,

【问题讨论】:

  • 遗憾的是,CLLocationManager 不提供此功能(即使 GPS 芯片组具有真实的时间信息)。一种方法(也许不是最好的方法)是使用某种Network Time Protocol

标签: objective-c ios date


【解决方案1】:

如果您想收集与特定时区相关的当前日期,您可以使用以下内容:

    //create calendar
NSCalendar *calendar = [NSCalendar currentCalendar];

//set calendar time zone
[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

//gather date components
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:[NSDate date]];

这有点令人费解,但 iOS 上的 NSDate 在夏令时方面似乎仍然存在问题,所以这为我节省了很多时间(双关语不是故意的:P)。

【讨论】:

  • 是的,但这是否解决了在操作系统上设置实际时间的问题?
  • 您是指Settings.app 中的时间?更改设备时间的唯一方法是通过设置,否则您需要使用 NSDate 和 NSDateComponents 手动创建时间。
  • 是的,这就是我的意思。如果我手动转到设置应用程序并更改小时/分钟/秒,这是否会给出正确的时间?
  • 使用 NSDate *date = [NSDate date];将返回相对于设备上设置的时间的日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 2013-03-20
  • 2017-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多