Network]如何依据NITZ时间计算当地 时间及全球标准时区
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
在LMMI_ind.c中可以通过函数l4c_nw_time_zone_lind获取到网络下发的NITZ信息,将获取的参数打印,请问以下信息怎么解析:
day=48 ,
hour=144 ,
min=34 ,
zone=35 ,
[SOLUTION]
3GPP网络送到Modem的NITZ(network time and time zone)会包括三类信息,可依此算出所处网络的当地时间和全球标准时区。
(LTZ) Local Time Zone
(Universal time) Universal Time and Time zone
(DST) Daylight Saving Time
目前常见的NITZ大部分都是带Universal time.
GCF测试会先带Universal time, 再单独带LTZ.
LTZ和Universal time里面的local time zone已包含Daylight saving time的补偿. 所以计算时间不需要考虑DST.
1. 如何计算当地时间
l4c_nw_time_zone_time_struct里面year/month/day/hour/min/sec存放的格式是BCD.
所以上例中的Universal time应该是03日09时22分
day=48 =>0X30
hour=144 =>0x90
min=34 =>0x22
根据local time zone不同, 增减Universal time之后即可得所处当地时间 .
local time zone计算方式如下:
if (timezone & 0x08)
{
kal_sprintf((char*)&tz_string, "-%d\0", (timezone & 0x07)*10+(timezone >> 4));
}
else
{
kal_sprintf((char*)&tz_string, "+%d\0", (timezone & 0x07)*10+(timezone >> 4));
}
zone=35 => 0x23 => 00100011
sign bit 是0,所以是GMT+,根据以上运算后, time zone是32.
time zone单位为15分钟(1/4小时), 32就是8小时,所以是GMT+8.
综合Universal time(03日09时22分),当地时间即为(03日17时22分)
2.如何计算全球标准时区
global time zone(GTZ)由local time zone(LTZ)和是否启用daylight saving time(DST)决定.
网络所给的LTZ值已经包含DST的补偿,
如local time zone为GMT+8,没有实行日光节约时间 (DST=0), 则全球标准时间区为GMT+8
如local time zone为GMT+8,实行1小时日光节约时间(DST=1),则全球标准时间区为GMT+7
如local time zone为GMT+8,实行2小时日光节约时间(DST=2),则全球标准时间区为GMT+6
如local time zone为GMT-8,实行1小时日光节约时间(DST=1),则全球标准时间区为GMT-9
如local time zone为GMT-8,实行2小时日光节约时间(DST=2),则全球标准时间区为GMT-10
所以:GTZ=LTZ-DST
3.相关的AT command
mtk proprietary +CIEV: 9,<UT>,<tz>[,<dst>]
description:
<UT>: universal time(UTC)
<tz>: local time zone
<dst>: daylight saving time
27.007 +CTZV: <tz>[,<dst>]
description:
<tz>: local time zone
<dst>: daylight saving time
在LMMI_ind.c中可以通过函数l4c_nw_time_zone_lind获取到网络下发的NITZ信息,将获取的参数打印,请问以下信息怎么解析:
day=48 ,
hour=144 ,
min=34 ,
zone=35 ,
[SOLUTION]
3GPP网络送到Modem的NITZ(network time and time zone)会包括三类信息,可依此算出所处网络的当地时间和全球标准时区。
(LTZ) Local Time Zone
(Universal time) Universal Time and Time zone
(DST) Daylight Saving Time
目前常见的NITZ大部分都是带Universal time.
GCF测试会先带Universal time, 再单独带LTZ.
LTZ和Universal time里面的local time zone已包含Daylight saving time的补偿. 所以计算时间不需要考虑DST.
1. 如何计算当地时间
l4c_nw_time_zone_time_struct里面year/month/day/hour/min/sec存放的格式是BCD.
所以上例中的Universal time应该是03日09时22分
day=48 =>0X30
hour=144 =>0x90
min=34 =>0x22
根据local time zone不同, 增减Universal time之后即可得所处当地时间 .
local time zone计算方式如下:
if (timezone & 0x08)
{
kal_sprintf((char*)&tz_string, "-%d\0", (timezone & 0x07)*10+(timezone >> 4));
}
else
{
kal_sprintf((char*)&tz_string, "+%d\0", (timezone & 0x07)*10+(timezone >> 4));
}
zone=35 => 0x23 => 00100011
sign bit 是0,所以是GMT+,根据以上运算后, time zone是32.
time zone单位为15分钟(1/4小时), 32就是8小时,所以是GMT+8.
综合Universal time(03日09时22分),当地时间即为(03日17时22分)
2.如何计算全球标准时区
global time zone(GTZ)由local time zone(LTZ)和是否启用daylight saving time(DST)决定.
网络所给的LTZ值已经包含DST的补偿,
如local time zone为GMT+8,没有实行日光节约时间 (DST=0), 则全球标准时间区为GMT+8
如local time zone为GMT+8,实行1小时日光节约时间(DST=1),则全球标准时间区为GMT+7
如local time zone为GMT+8,实行2小时日光节约时间(DST=2),则全球标准时间区为GMT+6
如local time zone为GMT-8,实行1小时日光节约时间(DST=1),则全球标准时间区为GMT-9
如local time zone为GMT-8,实行2小时日光节约时间(DST=2),则全球标准时间区为GMT-10
所以:GTZ=LTZ-DST
3.相关的AT command
mtk proprietary +CIEV: 9,<UT>,<tz>[,<dst>]
description:
<UT>: universal time(UTC)
<tz>: local time zone
<dst>: daylight saving time
27.007 +CTZV: <tz>[,<dst>]
description:
<tz>: local time zone
<dst>: daylight saving time
看不懂,帮小编顶一下!让高手来。
感谢分享
