【问题标题】:Best way to synchronize iPhone time with the server将 iPhone 时间与服务器同步的最佳方式
【发布时间】:2011-07-18 12:54:28
【问题描述】:

我有一个客户端服务器模型,其中服务器将发送一些具有日期参数的数据,iPhone 将需要呈现它。服务器和 iPhone 将驻留在不同的时区。所以我需要在两者中同步时间。假设用户在“07/18/2011/04 /45/EDT”(服务器时间)做了一些活动。从 iPhone 端,我需要将此日期字符串转换为 NSDate 对象。

实现这一目标的最佳方法是什么。

谢谢

【问题讨论】:

  • 最好的方法是始终在内部使用 UTC 时间戳,并且在向用户显示数据时只转换到这个或那个时区。请不要让您的服务器在 EDT 中生成或发送时间戳。
  • 好吧,让我们说服务器发送“07/18/2011/04/45/UTC”这个属性会转换为 NSDate 对象吗?我们是否必须假设服务器时间为 GMT +0000 还是隐式转换为正确的 NSDate 对象?
  • 你可以试试NSDatedateWithString:方法。如果返回(null),则输入的字符串不兼容。
  • 谢谢大卫。我认为应该是 NSDateFormatter dateWithString。我想知道这个 07/18/2011/04/45/UTC 是否会基于此被正确调用。请看我上面的评论。

标签: iphone cocoa-touch ios4 nsdate nsdateformatter


【解决方案1】:

抱歉,回复晚了,刚刚在 google 上查找“NSDate Sync to Server”并来到这里。我被同样的问题困住了,写了一个很好的小类别,有帮助。

它可以返回一个同步到任何 Web 服务器的 NSDate 对象,只需一个 HTTP 请求(每个会话)。

https://github.com/freak4pc/NSDate-ServerDate

如果您有任何问题,请随时告诉我。

【讨论】:

    【解决方案2】:

    如果您希望服务器和客户端的时间相同,请使用 NTP(网络时间协议)同步两者。 http://code.google.com/p/ios-ntp/source/browse/trunk/ntpA.xcodeproj/project.pbxproj?spec=svn25&r=25 有一个 obj-c ntp 客户端。

    如上所述,aways 将时间存储/发送为 unix 时间戳(自 UTC 纪元以来的秒数),并根据需要转换为时区。

    【讨论】:

      【解决方案3】:

      您绝对可以通过以下方式实现:

      1) 当您第一次从服务器获取数据时,将日期值作为“”(空白)传递。这样,服务器就会识别出,用户需要所有数据。

      2) 在上述服务中,请在服务器网络服务中添加“日期”标签。因此,当您获取其他数据时,您还可以获取服务器日期。因此,将此服务器日期存储在本地。

      3) 下一次,当你得到其他数据时,然后传递这个存储的日期(它将是服务器格式和时区),这样服务器只会给你那些在这个数据之后新添加或修改的数据。

      4) 这样您就可以处理日期问题。而且本地时间或时区也不会有问题。

      请查看以上要点,如有任何疑问,请告诉我。

      我已经在我的大部分应用程序中实现了这一点,并且运行良好。

      对于 UTC 日期,您可以使用以下函数:

      -(NSString *)getUTCFormateDate
      {
          NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
          NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
          [dateFormatter setTimeZone:timeZone];
          [dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
          NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
          //NSLog(@"UTC Date = %@",dateString);
      
          return dateString;
      }
      

      希望对你有帮助。

      谢谢。

      【讨论】:

      • 感谢 Nishant。但我也需要旧的日期信息:(。不知何故,我需要确保“07/18/2011/04/45/UTC”是 GMT +0000 还是隐式转换为正确的 NSDate 对象(除 GMT +0000 )。
      • 嗨 Dilshan,实际上为什么需要转换日期?因为这只是为了解决同步过程。这样,您就可以根据服务器日期获得适当的数据。请让我知道什么是旧日期信息,你需要它吗?
      • 获取收据、历史订单信息等
      • 嗨 Dilshan,为此,您应该知道服务器日期格式。并使用格式如“EEE,dd MMM yyyy hh:mm:ss zzzz”的 NSDateFormatter。可能会对你有所帮助。谢谢。
      • 这就是我现在正在做的事情。但是像 EST/EDT 这样的缩写不会起作用。这需要是UTC。这就是我提出上述问题的原因。
      猜你喜欢
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 2010-12-10
      • 2013-02-14
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多