mt2503 MT短消息时间显示为手机当前时区的时间
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
MT短消息时间显示为手机当前时区的时间
[SOLUTION]
MT消息中的时间戳解析后会按照spec中规定的7个byte存成U8scts[7](依次为:年月日时分秒时区),保存MT消息后,把该消息对应的msg_node中的
时间戳会存储为U32timestamp的形式,即scts[7]转换成U32timestamp(该值表示1970/1/1之后的秒数),view短信显示时间,是直接从msg_node中
取的timestamp转换成MYTIME格式。
在我司目前的时间转换上,均未考虑时区栏位。
如想对MT消息的时间按本机时区对应的时间显示,可以尝试以下修改:
externS16NITZGetTimeZone(U8);//add
voidsrv_SMS_scts_to_mytime(MYTIME*mytime,U8scts[]){
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
U8month;
//addstart
MYTIMEIncTime;
S16Ori_tz,Local_tz,diff_tz,tmp_Ori_tz,tmp_Local_tz;
S16error;
mEMSet(&incTime,0,sizeof(MYTIME));
ReadValue(NVRAM_TIMEZONE,&tmp_Local_tz,DS_SHORT,&error);
Local_tz=(FLOAT)tmp_Local_tz;
Local_tz/=4;//beijing--east8
tmp_Ori_tz=NITZGetTimeZone(scts[6]);
Ori_tz=(FLOAT)tmp_Ori_tz;//American--west6
Ori_tz/=4;
//addend
/*----------------------------------------------------------------*/
/*CodeBody*/
/*----------------------------------------------------------------*/
MMI_TRACE(MMI_COMMON_TRC_G6_MSG,TRC_SRV_SMS_SCTS_TO_MYTIME);
month=srv_sms_semi_octet_to_digit(scts[1]);
if(month==0)
{
mmi_dt_utc_sec_2_mytime(0,&mytime,MMI_FALSE);
}
else
{
mytime->nYear=srv_sms_semi_octet_to_digit(scts[0])+2000;
if(mytime->nYear>2090)
{
mytime->nYear=mytime->nYear-100;
}
mytime->nMonth=month;
mytime->nDay=srv_sms_semi_octet_to_digit(scts[2]);
mytime->nHour=srv_sms_semi_octet_to_digit(scts[3]);
mytime->nMin=srv_sms_semi_octet_to_digit(scts[4]);
mytime->nSec=srv_sms_semi_octet_to_digit(scts[5]);
}
//addstart
diff_tz=Local_tz-Ori_tz;
if(diff_tz>0)
{
incTime.nHour=(U8)diff_tz;
IncrementTime((*mytime),incTime,mytime);
}
elseif(diff_tz<0)
{
incTime.nHour=0-diff_tz;
DecrementTime((*mytime),incTime,mytime);
}
//addend
}
修改后,所有MT消息中的时间都会是本机当前时区所对应的时间。
MT短消息时间显示为手机当前时区的时间
[SOLUTION]
MT消息中的时间戳解析后会按照spec中规定的7个byte存成U8scts[7](依次为:年月日时分秒时区),保存MT消息后,把该消息对应的msg_node中的
时间戳会存储为U32timestamp的形式,即scts[7]转换成U32timestamp(该值表示1970/1/1之后的秒数),view短信显示时间,是直接从msg_node中
取的timestamp转换成MYTIME格式。
在我司目前的时间转换上,均未考虑时区栏位。
如想对MT消息的时间按本机时区对应的时间显示,可以尝试以下修改:
externS16NITZGetTimeZone(U8);//add
voidsrv_SMS_scts_to_mytime(MYTIME*mytime,U8scts[]){
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
U8month;
//addstart
MYTIMEIncTime;
S16Ori_tz,Local_tz,diff_tz,tmp_Ori_tz,tmp_Local_tz;
S16error;
mEMSet(&incTime,0,sizeof(MYTIME));
ReadValue(NVRAM_TIMEZONE,&tmp_Local_tz,DS_SHORT,&error);
Local_tz=(FLOAT)tmp_Local_tz;
Local_tz/=4;//beijing--east8
tmp_Ori_tz=NITZGetTimeZone(scts[6]);
Ori_tz=(FLOAT)tmp_Ori_tz;//American--west6
Ori_tz/=4;
//addend
/*----------------------------------------------------------------*/
/*CodeBody*/
/*----------------------------------------------------------------*/
MMI_TRACE(MMI_COMMON_TRC_G6_MSG,TRC_SRV_SMS_SCTS_TO_MYTIME);
month=srv_sms_semi_octet_to_digit(scts[1]);
if(month==0)
{
mmi_dt_utc_sec_2_mytime(0,&mytime,MMI_FALSE);
}
else
{
mytime->nYear=srv_sms_semi_octet_to_digit(scts[0])+2000;
if(mytime->nYear>2090)
{
mytime->nYear=mytime->nYear-100;
}
mytime->nMonth=month;
mytime->nDay=srv_sms_semi_octet_to_digit(scts[2]);
mytime->nHour=srv_sms_semi_octet_to_digit(scts[3]);
mytime->nMin=srv_sms_semi_octet_to_digit(scts[4]);
mytime->nSec=srv_sms_semi_octet_to_digit(scts[5]);
}
//addstart
diff_tz=Local_tz-Ori_tz;
if(diff_tz>0)
{
incTime.nHour=(U8)diff_tz;
IncrementTime((*mytime),incTime,mytime);
}
elseif(diff_tz<0)
{
incTime.nHour=0-diff_tz;
DecrementTime((*mytime),incTime,mytime);
}
//addend
}
修改后,所有MT消息中的时间都会是本机当前时区所对应的时间。