iOS 的时间总是比真实时间慢8小时

例如,一个北京时间"2014-4-4 22:00"(字符串),需要转换成 NSDate。字符串转换成 NSDate 一般是通过 NSDateFormatter 进行的。而在 iOS 上 NSDate 以 GMT 时间存储,因此NSDateFormatter会自动将字符串当前时区的本地时间处理,即将被转换的北京时间(字符串"2014-4-4 22:00")换成 GMT 时间("2014-4-4 14:00")。如果直接把这个 NSDate(longlong,1970以来的秒数或毫秒数)传给服务器,服务器会把这个时间当成北京时间使用(实际上它却是GMT时间),这就导致时间差了8小时。

正确的做法是在这个 NSDate 的基础上加上时差。而时差的计算需要知道当前时区。[NSTimeZonesystemTimeZone]可以得到当前时区(东8区),然后用 secondsFromGMTForDate: 方法可获得这个时区(东8区)的时差(以秒计)。代码如下:

NSDateFormatter* df=[NSDateFormatter new];

//        [dfsetLocale:[NSLocale  currentLocale]];

       df.dateFormat=@"yyyy-MM-dd HH:mm";

        NSDate* date=[dfdateFromString:@"2014-4-4 22:00"];

        NSTimeZone *zone =[NSTimeZone systemTimeZone];

        NSInteger interval = [zonesecondsFromGMTForDate: date];

        NSDate *localeDate =[date  dateByAddingTimeInterval:interval];

       NSLog(@"%@",localeDate);

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。