最近在考虑获取当前时间的问题,因为我们的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获取系统时间的时候,如果是需要当地时间,那么不用管.如果要和北京时间进行比对,那么请设置时区,以免给出国的用户造成不必要的麻烦.