您的位置:首页 > 其它

MTK 时间 时区问题解决方案

2015-09-18 21:47 204 查看

1.俄罗斯时区问题

2014年10月26日开始,俄罗斯全国时区将在目前基础上向后推迟一个小时并且由之前的9个时区也扩充到11个.以首都莫斯科为例,目前时间比格林尼治时间早4个小时,10月26日之后,莫斯科时间将比格林尼治时间早3个小时.最为直观的是,把手机时间从2014年10月26日之前调整到之后Moscow时区将由GMT:+4变成GMT:+3,Sakhalin时区从GMT:+11变成GMT:+10.由于目前androidL之前的版本Google没有主动更新时区文件,这样我们必须去修改相关文件适应这一改变.

2.夏令时,时间更新方式

一、夏令时

夏时令(Daylight Saving Time:DST),又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间提前一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个国家具体夏令时规定不同。比如美国芝加哥时区夏时制开始时间:2014-3-9 2:00:00夏时制结束时间:2014-11-2 2:00:00;俄罗斯从2014年10月26日起取消自2011年开始使用的夏令时,转变为“冬季时间”,未来也不再使用冬夏时制转换。

如果发现系统时区和预想的时区或者当地时区相差一个小时,原因可能是夏令时制的问题:

可以通过下面2中方法确认:

1、可以网上查询该时区是否有夏令时,然后查看当前的系统时间是否在此时区的夏令时执行时间段内。

2、调整手机系统日期,看看时区时差是否有变化。比如手机时区为芝加哥时区,系统时间为8月15日,显示GMT:-5,如果系统时间调整为12月1日,将会显示GMT:-6。

二、Android时间、时区更新方式

在目前Android版本,通过网络同步时间有两种方式:NITZ和NTP。NITZ是否支持取决于SIM的运行商,目前国内运行商还不支持。NTP是通过网络获取网络时间,只要手机可以正常联网就可以更新时间。

如果勾选Setting里面的自动更新时间没有效果:

说明通过NITZ和NTP方式都无法更新时间,一般来说是在运营商不支持NITZ,或者网络状况有问题时发生,比如手机没有连上WIFI或GPRS,不能访问互联网,或者手机网络访问NTP server延时太大,或者NTP server地址配置不正确等。

1、如何验证运营商是否支持NITZ消息呢?

可以使用该SIM卡在对比机中测试,如果对比机也无法更新时间,说明,此卡运营商不支持nitz消息。

2、如何确认是手机是否可以正常访问互联网

可以打开一个网页,看看是否可以正常打开。

如果sim运行商支持NITZ消息或者手机可以正常联网,还是无法更新时间,需要根据log分析具体的原因,如何分析可以参考问题分析模块

需要注意的是NTP只更新时间,不会更新时区。

3.AM/PM、 日期格式

一、时间格式

时间的小时制分为12小时制和24小时制。由于一天是24小时,如果是12小时制必须把一天分为2段,为了区分当前时间是哪一段,因此在显示上必须加上一个标记。一般是凌晨开始到中午是一个时间段叫做上午(am),下一个时间段就是下午(pm).比如上午8点、下午2点。

在Android时间显示上每种语言默认时间格式不同,标记时间段的翻译也不同。比如英文默认是24小时制,时间段使用am、pm;中文默认是12小时制,时间段使用上午、下午。



这些都是在ICU里面定义的,具体定义在external\icu4c\data\locales\xx.txt(xx是语言代码,ISO_639-1),找到gregorian部分,如波斯fa.txt中定义

gregorian{

AmPmMarkers{

"قبل‌ازظهر",----->am

"بعدازظهر",-----àpm

}

DateTimePatterns{

"H:mm:ss (zzzz)",----àH代表24小时制,h代表12小时制

"H:mm:ss (z)",

"H:mm:ss",

"H:mm",

……

AmPmMarkers这个就是定义时间段字串,H:mm是时间格式显示,对于其他语言比如印尼语显示为H.mm。如果要修改时间段、小时制或者显示格式,可以在此处修改。注意修改ICU资源需要单独编译ICU资源,在new整个工程,否则不会其效果。具体编译ICU可以参考FAQ04011
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: