iOS 时区

      由于项目之前对时区没有做过统一的处理,导致国外友人使用起来不是很方便,借此机会,咱们聊一聊时区的事。

基础知识

1.获取所有已知的时区名称

NSArray *zoneArray = [NSTimeZone knownTimeZoneNames];

for(NSString *str in zoneArray){

NSLog(@"%@",str);

}

运行结果为:

iOS 时区_第1张图片

注意:没有北京时区

2.返回时区名称和缩写

NSTimeZone *zone = [NSTimeZone localTimeZone];

NSString *strZoneName = [zone name];

NSString *strZoneAbbreviation = [zone abbreviation];

NSLog(@"名称 是 %@",strZoneName);

NSLog(@"缩写 是 %@",strZoneAbbreviation);

运行结果:


3.系统时区,本地时区

[NSTimeZone setDefaultTimeZone:[[NSTimeZone alloc] initWithName:@"America/Chicago"]];

NSTimeZone *systemZone = [NSTimeZone systemTimeZone];

NSTimeZone *localZone = [NSTimeZone localTimeZone];

NSLog(@"系统时区%@",systemZone);

NSLog(@"本地时区%@",localZone);

运行结果:


其中,系统时区不能通过代码来进行更改。

4.得到当前时区与零时区的间隔秒数

NSTimeZone *zone = [NSTimeZone localTimeZone];

NSInteger seconds = [zone secondsFromGMT];

NSLog(@"%ld",seconds);

运行结果:

5.根据上小结根据与零时区的秒数偏移返回一个新时区对象(设置的为上海时区)

NSTimeZone* timeZone = [NSTimeZone timeZoneForSecondsFromGMT:8*3600];

演练

无论身在何处,系统时间设置为北京时间

NSTimeZone *zone = [NSTimeZone localTimeZone];

UILabel *titleLab = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 200, 30)];

titleLab.text =[NSString stringWithFormat:@"当前时区:%@",[zone name]];

titleLab.backgroundColor = [UIColor grayColor];

[self.view addSubview:titleLab];

NSDate *date = [NSDate date];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];

//强制设为北京时区

NSTimeZone* timeZone = [NSTimeZone timeZoneForSecondsFromGMT:8*3600];

[dateFormatter setTimeZone:timeZone];

UILabel *dateLab = [[UILabel alloc] initWithFrame:CGRectMake(100, 200, 200, 30)];

dateLab.backgroundColor = [UIColor lightGrayColor];

dateLab.text = [dateFormatter stringFromDate:date];

[self.view addSubview:dateLab];

运行结果:

iOS 时区_第2张图片

结束,就这样

你可能感兴趣的:(iOS 时区)