iOS时区的问题记录

iOS时区的问题记录,第1张

NSCalendar calendar = [NSCalendar currentCalendar];

NSCalendarUnit unit = NSCalendarUnitDay;

NSDateComponentscurrentDC = [calendarcomponents:unitfromDate:self];

使用的是系统时区,当手机设置的时区不同时,返回的dateComponents也不同,因此造成日期显示错误。

例:

当传入的date同为:2020-08-10 16:00:00 +0000

系统时区A檀香山,返回的day为10

系统时区B中国大陆,返回的day为11

NSCalendar calendar = [NSCalendar currentCalendar];

修改calendar的时区

calendartimeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];

原因:手机系统没有反应过来,可能是刚刚重启或者是发生故障了。

解决方法:先把自动设置关了,然后点击时区,选择一下就好了,然后再打开自动设置。

时区:是地球上的区域使用同一个时间定义。1884年在华盛顿召开国际经度会议时,为了克服时间上的混乱,规定将全球划分为24个时区。

1、创建一个时间对象

2、获取当前时区

3、获取当前时区和GMT的时间间隔

4、获取当前系统时间

概念:时间戳是从 1970年1月1号 00:00:00(北京时间1970年01月01日08时00分00秒)开始到当前时间走过的毫秒数

获取当前系统时间的时间戳

获取比当前时间,晚5秒的时间

倒计时功能 :通常是服务器会给我们返回一个时间戳,我们用这个时间戳和当前系统的时间戳对比,将对比的差值(毫秒)转换为几天,几小时等。

1、获取当前系统时间

2、获取当前系统时间的时间戳

3、时间戳 -> 日期

4、日期 -> 时间戳

5、时间比较

一、给定一个10位时间戳,转成不同时区的日期

//给定一个时间戳

NSString test = @"1652861974”;

//转成北京时区下的日期

NSDateFormatter beijingFormatter = [[NSDateFormatter alloc] init];

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

NSTimeZone beijingZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT+0800"];

[beijingFormatter setTimeZone:beijingZone];

//转成手机系统设置的时区(纽约)下的日期

NSDateFormatter localFormatter = [[NSDateFormatter alloc] init];

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

NSTimeZone localZone = [NSTimeZone systemTimeZone];//当前手机设置的是纽约时区

[localFormatter setTimeZone:localZone];

 NSDate testDate = [NSDate dateWithTimeIntervalSince1970:[test longLongValue]];

NSString beijingDateString = [beijingFormatter stringFromDate: testDate];//北京时区下的日期字符串 :“2022-05-18 16:19:34”

NSString localTimeString = [localFormatter stringFromDate: testDate];// 换成本地(纽约)时间:2022-05-18 04:19:34

NSLog(@"服务器返回北京时间:%@ 转换成本地时区时间:%@ ", beijingDateString, localTimeString);

结果打印: 服务器返回北京时间:2022-05-18 16:19:34 转换成本地时区时间:2022-05-18 04:19:34

二、反向验证同一时刻下世界在不同时区的日期返回的时间戳是相同的:

北京时区日期: 2022-05-18 16:19:34 ( 以上的beijingDateString对应的 )

纽约时区日期: 2022-05-18 04:19:34( 以上的localTimeString对应的 )

NSDate beiDate = [beijingFormatter dateFromString: beijingDateString];

NSTimeIntervalbeiInterval = [beiDate   timeIntervalSince1970];

NSDateLocDate = [localFormatter   dateFromString: localTimeString];

NSTimeIntervalLocInterval = [LocDate  timeIntervalSince1970];

NSLog(@"原始时间戳:%@ 北京时区生成时间戳:%f  本地时区生成时间戳:%f ",test,( double )beiInterval,( double ) LocInterval);

结果打印:  原始时间戳:1652861974  北京时区生成时间戳:1652861974000000   本地时区生成时间戳:1652861974000000 

验证了同一时刻虽然处于世界不同时区,但是拿到的时间戳是一样的,前提是转成对应时区下的日期即 NSDateFormatter要设置对应的时区。

iPhone手机设定日期和时间:选取“通用,日期与时间”,然后关闭“自动设置”。

轻按“时区”,然后输入您的时区中的一个主要城市的名称,轻按“日期与时间”返回按钮,轻按“设定日期与时间”,然后输入日期和时间。

苹果公司(Apple Inc)是美国一家高科技公司,由史蒂夫乔布斯、斯蒂夫盖瑞沃兹尼亚克和罗纳德杰拉尔德韦恩(Ron Wayne)等人于1976年4月1日创立,并命名为美国苹果电脑公司(Apple Computer Inc),2007年1月9日更名为苹果公司,总部位于加利福尼亚州的库比蒂诺。

苹果手机功能特点。

iPhone系列机型自iPhone 4(包含)之后配置Apple Silicon自研芯片,内部集成了处理器核心、GPU核心、IO核心和内存控制器。

iPhone系列产品静音键在设备正面的左侧,是iPhone设计的物理功能开关,可以让用户在静音和铃声之间快速切换。

以上就是关于iOS时区的问题记录全部的内容,包括:iOS时区的问题记录、苹果手机不能自动识别时区、Swift获取系统当前时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10628707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存