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

时间: 2024-10-20 04:26:29

iOS 时区设置的相关文章

iOS-设置视图的边框

iOS-设置视图的边框 效果图: 具体代码: //创建视图 UIView * view=[[[UIView alloc]init]autorelease]; view.frame=CGRectMake(0, 0, 270, 250); view.backgroundColor=[UIColor whiteColor]; view.center=self.view.center; [self.view addSubview:view]; //view的边框 CALayer * layer=[vie

【转】iOS中设置导航栏标题的字体颜色和大小

原文网址:http://www.360doc.com/content/15/0417/11/20919452_463847404.shtml iOS中设置导航栏标题的字体颜色和大小,有需要的朋友可以参考下. 在平时开发项目的时候,难免会遇到修改导航栏字体大小和颜色的需求,一般使用自定义视图的方法,其实还存在一种方法. 方法一:(自定义视图的方法,一般人也会采用这样的方式) 就是在导航向上添加一个titleView,可以使用一个label,再设置label的背景颜色透明,字体什么的设置就很简单了.

linux下的时间及时区设置

一.时间设置及同步 1修改系统时间 #date -s 06/18/14 #date -s 14:20:50 2命令查看.设置硬件时间 #hwclock  --show 或者clock  --show #设置硬件时间 hwclock --set --date="06/18/14 14:55" 或者# clock --set --date="06/18/14 14:55" 3同步系统及硬件时钟 # hwclock --hctosys 或者 # clock --hctos

ubuntu server 时区设置问题解决

1.当执行此命令的时候 ntpdate us.pool.ntp.org 出现一下错误提示 name server cannot be used: Temporary failure in name resolution 2.解决办法(添加DNS服务器) vi /etc/resolv.conf 添加: nameserver 8.8.4.4 3.国内常用NTP服务器地址及IP2011-09-07 15:06:08210.72.145.44 (国家授时中心服务器IP地址)133.100.11.8 日本

时间同步总是不对,可能是时区设置的问题

最近开始研究nagios. oldboy说,这个软件对"时间同步"的要求比较严.但是,我选择作为nagios服务端的虚拟机,是当年学RHCE的时候做的.那时候我就发现,时间同步总是不对.为此,还尝试安装过"VMware Tools".虽然安装成功,但是,时间同步还是不准确(误差会有6个小时以上). 这次,其实再换台虚拟机也行.只不过,自己确实不想再赶什么时间.做到什么地方,算什么地方吧--好在,也没有花太多的时间,这个问题就解决了. 通过在百度上搜索关键字"

ios:设置视图背景图片的方法

1. 使用一个UIImageView实例做子视图,并且放最后面UIImageView *customBackgournd = [UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.jpg"]];self.background = customBackground;[customBackground release]; [self addSubview:background];[self sendSubVie

CentOS 7时区设置

安装完CentOS 7过后由于各种原因需要修改或是设备时区来同步服务器的时间. 在CentOS 7里面有一个命令timedatectl可以帮助我们修改服务器的时区. 首先我们可以使用timedatectl命令查看目前服务器里的时区设置: Local time: Wed 2015-07-22 16:48:14 CST Universal time: Wed 2015-07-22 08:48:14 UTC Timezone: Asia/Shanghai (CST, +0800) NTP enable

linux时间时区设置修改及时间同步

linux时间时区设置修改及时间同步一.时区显示时区date --help 获取帮助date -Rdate +%z上面两个命令都可[[email protected] ~]# date -R; date +%zFri, 19 Oct 2012 23:34:27 +0800+0800主要就是后面的+0800,东八区修改时区cp /etc/localtime /etc/localtime.bak #备份系统默认时区cp /usr/share/zoneinfo/Asia/Shanghai /etc/l

mysql-connector-java 6.x 时区设置

最近遇到了一个问题,java从mysql从读出的时间与本地时间有14个小时的时间差,经查证.测试解决了此问题,在此总结一下: 一.使用mysql-connector-java 6.x版本驱动需要做如下配置: 1.引入pom <dependency>   <groupId>mysql</groupId>   <artifactId>mysql-connector-java</artifactId>   <version>6.0.6<