在应用程序中本地获取当前服务器时间。

Posted

技术标签:

【中文标题】在应用程序中本地获取当前服务器时间。【英文标题】:Have the current server time locally in the app. 【发布时间】:2013-08-02 14:24:24 【问题描述】:

我正在构建一个使用大量 NSDate 类的应用程序。但是 NSDate 使用来自设备的时间,因此如果用户更改其设备中的小时,应用程序将有一个虚假的时间/日期,并且应用程序不会与服务器同步,用户体验将是不好...

所以我需要以某种方式获取与服务器相关的所有日期,我可以在每次执行[[NSDate alloc] init]时向服务器请求时间,因为我使用了很多......所以我需要一种方法始终获取相对于服务器的日期...类似于 [[MYDate alloc] init] 并让我的服务器时间在那里...

到目前为止我能想到的最好的解决方案是:当应用程序启动时,我询问服务器它是当前的 unix 时间,在得到该响应后,我在单例中设置了一个每秒运行一次的选择器,更新了这个 unix 时间,然后我更改了每个使用我自己的 Singleton 类调用 [[NSDate alloc] init] 以使我的服务器时间保持更新...我不确定如何处理应用程序何时进入后台...我的时间不会同步...

你们怎么看?

谢谢!!

【问题讨论】:

【参考方案1】:

这可以通过使用 NSDate 子类轻松完成。

例如

@interface MyDate : NSDate



@end

@implementation MyDate

- (id) init
  if(![super initWithTimeIntervalSince1970:[ServerSingleton time]])
    return nil;
  return self;


@end

这应该可以满足您的要求。至于单例,你不需要每秒钟检查一次,这对 ios 设备、网络和服务器来说都是很多工作。相反,您只需要在应用程序启动时检查服务器一次。然后,让你的单例看起来像这样:

- (void)checkTime
  self.timeOffset = serverTime - deviceTime;


- (time_t)time
  return deviceTime - self.timeOffset;

这应该只需要检查一次,以获取设备和服务器之间的当前时间差。然后,您只需从当前设备时间中减去时间偏移即可得到服务器上的当前时间。

【讨论】:

但是如果用户同时改变了他的设备时间呢?

以上是关于在应用程序中本地获取当前服务器时间。的主要内容,如果未能解决你的问题,请参考以下文章

在离线模式下获取当前日期

在java中获取当天时间,然后让这个当前时间加一个天数,得到最后的时间怎么计算。

java 获取本机当前时间并对小时任意加减,后判断新时间与当前时间的前后关系 求程序

如何在c#中获取用户本地机器时区

java中获取本地IP地址

java获取本地时间和服务器时间的问题