zoukankan      html  css  js  c++  java
  • 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);
    
  • 相关阅读:
    网站备份list
    vnc checklist
    appnode iptables 规则后面覆盖前面的
    Appnode + Discuz checklist
    解决WORD文档无法显示链接的图像问题
    应用容器Application container
    要研究的内容
    转 Flex MXML编译成AS类
    Flex文件结构
    int a
  • 原文地址:https://www.cnblogs.com/penger/p/4198201.html
Copyright © 2011-2022 走看看