概述
最近在考虑获取当前时间的问题,因为我们的App不一定只是在中国境内使用,当他们查看App的时候,如果App内有涉及到获取当前时间,那么要注意了!!!
目前从iOS7开始,系统获取的时间是以时区为准,而不是以地区为准,那么在你手机里设置, 通用-->日期与时间 你会看到如下界面.
这里默认的是自动设置,应该就是系统获取了你当前的坐标,判断你的坐标在中国境内,所以时区自动设置为北京.
然而,当你去了英国伦敦游玩呢?系统会获取你的坐标(前提是上图中时区你开启了自动设置),定位为伦敦,那么你的时间就会设置为英国伦敦当地正确的当前时间.
当然,你获取到了当地的正确时间,但是当你打开App时,如果你是按照下面的方法获取的当前时间,也没有问题.
-(NSString*)getCurrentTimes{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
//现在时间,你可以输出来看下是什么格式
NSDate *datenow = [NSDate date];
//----------将nsdate按formatter格式转成nsstring
NSString *currentTimeString = [formatter stringFromDate:datenow];
NSLog(@"currentTimeString = %@",currentTimeString);
return currentTimeString;
}
但是,当你把获取的时间传回国内,或者和数据库进行对比,你要是存的是字符串YYYY-MM-dd HH:mm:ss ,那就糟糕了.....因为你传回来的是你在国外的当前时间,这个时间和国内的时间是不一致的,差时区的...........
那怎么办呢???
方法1:(不起作用)
网上找到一种更改 NSLocale 设置 Identifier 为@zh-CN 的,如下面代码,但是我测试的没什么作用.....(测试之前要把自动设置 改为手动,输入一个其他地区)
-(NSString*)getCurrentLocalTimes{
NSLocale * locale = [NSLocale localeWithLocaleIdentifier:@"zh-CN"];
NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
formatter.locale = locale;
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSDate * date5 = [NSDate date];
NSString * nowTime = [formatter stringFromDate:date5];
NSLog(@"nowTime=%@",nowTime);
}
方法2:
设置NSTimeZone为东八区,就是不管你是在国内还是国外,我获取的时间都是当前的北京时间
-(void)getEastEightAreaCurrentTime{
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(@"EastEightAreaTime=%@",now);
}
总结:
大多数人的手机的时区都是自动获取的,所以,当你的App获取系统时间的时候,如果是需要当地时间,那么不用管,直接用下面这个方法就行;
-(NSString*)getCurrentTimes
如果要和北京时间进行比较,那么请用下面的方法设置时区,以免给出国的的用户造成不必要的麻烦;
-(void)getEastEightAreaCurrentTime;
下面提供一些关于时间的文章:
iOS - OC NSTimeZone 时区
NSDate获取当前时间、间隔、年月日、转NSString等方法总结
NSDate 8小时问题-没你想的那么简单
IOS TimemZone根据当前的时区变化时间
最后
以上就是认真裙子为你收集整理的iOS学习 --- 时区设置NSTimeZone的全部内容,希望文章能够帮你解决iOS学习 --- 时区设置NSTimeZone所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复