先来简单说一下这个Bug触发时的表现,如果用户进入设置—通用—时间与日期,关闭自动设置,并将时间修改为1970年1月1日,分秒任意。修改时间后,需要重启设备。然后该设备启动时,则会卡在苹果Logo,无法继续启动。\x0d\iPhone时间调到1970年1月1日变砖Bug原理:\x0d\说到IOS时间Bug,则必须要介绍一下Unix时间戳,IOS系统时间是使用Unix时间戳(Unix epoch)表示(time_t数据类型)的。Unix时间戳规定,UTC时区的1970年1月1日 0点0时0秒的值为0,以秒为单位,即每过一秒,二进制数字加1。\x0d\以32位系统为例,在32位系统中,time_t是长度为32位的,首个二进制位是符号位,用来储存正负。正数则为1970/1/1以后的时间,负数反 之;其余的31位用来记数。当时间到达2038年1月19日3时14分08秒时,数值位全部向前进1,导致符号位被置1,其余31位为0。此时,将出现 时间回归的情况,系统时间变为1901年12月13日20时45分52秒,系统将会出现错误。为了避免这个错误,苹果将最大时间设定为2038年1月 1日23时59分59秒。而64位系统的最大时间限额将为292,277,026,596年12月04日15时30分08秒,基本可以说是不受这个限制的 了。\x0d\知道上面这个知识点后,我们再来说一下时区对时间的影响,大家都知道,我们所在的时区是北京时区,假如我们将时间设置在1970年1月1日0点0时0 秒,北京时间=GMT+8=UTC+8,UTC时间则为1969年12月31日16时0分0秒。这样就会出现时间负值,即时间回归bug触发,系统启动卡 在Kernel阶段,时间错误,则无法继续进行启动。\x0d\iPhone时间调到1970年1月1日变砖触发该bug条件与表现:\x0d\满足以下条件,『时间回归』bug被触发:\x0d\系统版本:IOS 80 ~ IOS 93 beta 3\x0d\硬件设备:搭载64位处理器的设备(即处理器为A7~A9X的设备)\x0d\进入『设置』-『通用』-『时间与日期』,关闭『自动设置』,并将时间修改为1970年1月1日,分秒任意。\x0d\修改时间后,需要重启设备。\x0d\Bug触发表现:IOS设备启动时,卡在苹果Logo,无法继续启动。\x0d\iPhone时间调到1970年1月1日变砖解决办法:\x0d\对于所有64位系统,需要拆机,并拆出电池,放置一段时间后,重新安装即可。如果电池电量充足,等待数小时,当Unix时间戳的数值大于等于0,系统时间生效,可正常开机。\x0d\需要提醒大家的是,当IOS设备连接到公共网络时,IOS系统将会使用NTP服务对时区、时间进行校准。如果黑客发送恶意的NTP攻击,将IOS系统时间校准至UTC小于0的时间,那么所有用户设备均会受到此bug影响,在重新启动设备后无法使用设备。
看了回答,总有一些S。B,我也找了半天,只找到这个国家的,没找到地区
countriesArray = [[NSMutableArray alloc] init];
NSLocale locale = [NSLocale currentLocale];
NSArray countryArray = [NSLocale ISOCountryCodes];
for (NSString countryCode in countryArray)
{
NSString displayNameString = [locale displayNameForKey:NSLocaleCountryCode value:countryCode];
[countriesArray addObject:displayNameString];
}
在iOS中我们经常需要使用到时间戳,但在iOS下获取“时间”的方法有很多。不过总的来说,我们可以在iOS中获取的时间戳主要有两类----绝对时间与相对时间。下面将总结一下这些方法之间的关系。
绝对时间是指那些以固定时间为参考系的时间戳。
常用的有Foundation框架中的
[[NSDate date] timeIntervalSinceReferenceDate];
以及CoreFoundation框架中的
CFAbsoluteTimeGetCurrent();
上述两种方法是等价的,所参考的起始时间都是世界时间(UTC)2001年1月1日凌晨,所返回的double类型的结果都是从参考时间至今经过的秒数。
除了刚才提到的参考时间,还有以世界时间(UTC)1970年1月1日凌晨为参考系的
[[NSDate date] timeIntervalSince1970];
由于参考系是固定的,显然每次通过这些方法获取的时间戳都将是不同的。但绝对不变的参考系并不意味着绝对可靠的结果,实际上当用户手动改变了设备上的系统时间后,基于系统时钟的上述方法返回的结果也会一同改变。
假如我们想获取一种不会被用户手动修改而影响的时间戳,该怎么办?答案是相对时间。
相对时间是指以非固定时间为参考系返回的时间戳
常用的有Foundation框架中的
[[NSProcessInfo processInfo] systemUptime];
和QuartzCore框架中的
CACurrentMediaTime();
上面两种方法获取到的都是设备自最近一次启动至今经过的时间戳。 CFAbsoluteTimeGetCurrent() 方法调用底层的 mach_absolute_time() 方法后将结果转换成秒返回。该结果是设备自最近一次启动至今经过的时间,不随系统时间改变而改变,但当设备重启后,该方法返回的结果也会重置。
两类时间戳都有各自的特点:
绝对时间参考固定的时间点返回时间戳但结果会受系统时钟的影响;
相对时间在设备不重启的情况下总能正确返回某一时间段内流逝的时间;
所以具体要使用哪种方法获取时间戳需要结合不同的需求场景去选择。
获取到了时间戳,也许我们需要利用它来转换为时间并以一定的格式去展示,NSDate转NSString的方法网上有很多,在这里就不再叙述。需要注意的一点是,获取到绝对时间戳是以世界时间(UTC)为准的,NSDate中保存的日期也是以世界时间(UTC)为准的,所以在通过NSDateFormatter转换为NSString的时候一定要注意当前的时区。
如果App本身对获取的时间精度要求很高,还是直接通过网络从服务器获取时间戳会比较保险。当网络可用时,直接从服务器获取;网络不可用时,且设备没有被重启过,可以根据上一次获取服务器时间戳的时刻到此时的时间差来推算出正确的时间。
all-in-the-timing-keeping-track-of-time-passed-on-ios
苹果时间设置是在通用设置的“日期与时间”设置里面。可以开启或关闭“24小时制”,可以开启“自动设置”时间功能,也可以关闭“自动设置”后手动调整时间。以下为详细的 *** 作步骤:
工具/原料:iPhone13,iOS152。
1、苹果手机设置中,点击“通用”设置选项。
2、在通用设置中,点击“日期与时间”选项。
3、在日期与时间中,就可以根据需要设置时间。如果开启“24小时制”,时间就会是24小时制度,如果关闭“24小时制”,时间就会是12小时制度。建议开启“自动设置”,苹果手机系统就会按定位的时区自动更新时间。
4、如果想要手动调整时间的,先关闭“自动设置”,然后点击下方出现的时间去手动设置时间即可。
选择时间服务器一定要选择大牌子,可靠的厂商,下面给你介绍一下实力大,可靠的自主研发的品牌和型号,北京中新创科技的DNTS-7是一种高科技智能的基于NTP/SNTP协议的时间服务器,DNTS-7从GPS地球同步卫星上获取标准时钟信号信息,将这些信息在网络中传输,网络中需要时间信号的设备如计算机,控制器等设备就可以与标准时钟信号同步。标准的时钟信息通过TCP/IP网络传输,DNTS-7支持多种流行的时间发布协议,如NTP,time/UDP,还可支持可设置的UDP端口的中新创科定义的时间广播数据包。NTP和time/UDP的端口号分别固定于RFC-123和RFC-37指定的123和37。中新创的DNTS-7同时支持SNTP协议的广播工作模式,为电信、移动、电力、广播、政府部门提供完整的网络解决方案如97工程、DCN网络建设和数据传输、接口转换产品。
以上就是关于iphone把时间调到1970年1月1日之后怎么调回来全部的内容,包括:iphone把时间调到1970年1月1日之后怎么调回来、ios获取所有国家和地区列表的方法,如果能直接调出系统的那个界面就更好了。、iOS时间戳杂谈等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)