iOS 时区设置

  最近在考虑获取当前时间的问题,因为我们的APP不一定只在天朝境内使用,现在很多人出国游玩,当他们查看APP的时候,如果你的应用有涉及到获取当前时间,那么你要注意了!

  貌似从iOS8开始(因为手头没有iOS6,7设备),系统获取时间是以时区为准,而不是地区,那么在你手机设置里,通用-->日期与时间 你会看到如图界面.

  这里系统默认是自动设置, 应该就是系统获取了你当前的坐标,判断你的坐标是在中国境内,所以时区自动设置为北京.

  然而当你去了英国伦敦游玩呢?系统会获取你的坐标,定位为伦敦,那么你的时间就会设置为英国伦敦. 

  当然,你获取到了当地的正确时间.但是当你打开APP时,如果你没有设定时区,那么也将获取伦敦时间.也没有问题.但是如果你获取的时间要传输回国内,或者和数据库进行比对,你要是存得是字符串(yyyy-MM-dd HH:mm:ss),那就糟糕了... 

  遇到这种情况,最简单的办法就是设置时区,当你的数据需要用时间进行比对,你最好把时区定准在某一时区,通常是定位在天朝(东8区).

  网上有一种更改 NSLocale 设置 Identifier 为@"zh-CN"的,然后把formatter.locale = locale的,亲测不好使. 你试之前先把自动获取时区改为手动,输入一个别的地区,比如伦敦.上代码:

1     NSLocale * locale = [NSLocale localeWithLocaleIdentifier:@"zh-CN"];
2     NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
3     formatter.locale = locale;
4     formatter.dateFormat = @"yyyy-MM-dd hh:mm:ss";
5     NSDate * date5 = [NSDate date];
6     NSString * nowTime = [formatter stringFromDate:date5];
7     NSLog(@"nowTime=%@",nowTime);

  你得到的时间肯定不是北京时间,为何? "zh-CN" 是简体中文.所以这种设置,具体有什么用处我没看出来,但是对于时间是没有影响的.

  那么如何正确设置天朝时区? NSTimeZone,多说无益,上代码:

    NSDate * date = [NSDate date];
    NSDateFormatter * df = [[NSDateFormatter alloc]init];
    [df setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
//    设置东8区
    [df setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8*3600]];
    NSString* now = [df stringFromDate:date];
//    正确获取天朝时间
    NSLog(@"now=%@",now);

  NSTimeZone 还有 [NSTimeZone systemTimeZone] , [NSTimeZone defaultTimeZone] 获取时区的方法,这两种方法都是获取的系统时区.

  大多数人的时区都是自动获取的,所以,当你的APP获取系统时间的时候,如果是需要当地时间,那么不用管.如果要和北京时间进行比对,那么请设置时区,以免给出国的用户造成不必要的麻烦.

 

posted @ 2016-01-19 10:56  友朋  阅读(10165)  评论(0编辑  收藏  举报