当前位置: 首页 > news >正文

NITZ 网络时间与时区同步架构

1. 概述

NITZ (Network Identity and Time Zone) 是 3GPP TS 22.042 定义的标准机制,允许移动网络通过 NAS 信令(MM Information / GMM Information)向 UE 下发当前时间、时区偏移和夏令时信息。Android Telephony 框架通过NitzStateMachine状态机处理 NITZ 信号,并将同步后的时间/时区建议发送给TimeDetectorService/TimeZoneDetectorService(系统级时间服务)。

1.1 NITZ 信号格式

yy/mm/dd,hh:mm:ss(±)tz[,dt[,tzid]]
示例含义
22/05/15,10:30:00+32,012022-05-15 10:30:00, UTC+8:00, DST+15min
22/05/15,10:30:00-20,002022-05-15 10:30:00, UTC-5:00, 无 DST
22/05/15,10:30:00+00,00,Asia/Shanghai含 Olson TZ ID(3GPP R9+)

2. 核心类与源码锚点

类名路径说明
NitzStateMachine[NitzStateMachine.java](file:///d:/Resource%20Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/NitzStateMachine.java)NITZ 状态机接口
NitzStateMachineImpl[NitzStateMachineImpl.java](file:///d:/Resource%20Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/nitz/NitzStateMachineImpl.java)NITZ 状态机实现
NitzData[NitzData.java](file:///d:/Resource%20Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/NitzData.java)NITZ 原始数据解析与封装
NitzSignal[NitzSignal.java](file:///d:/Resource%20Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/NitzSignal.java)NITZ 信号封装(含接收时间戳)
TimeZoneSuggesterImpl[TimeZoneSuggesterImpl.java](file:///d:/Resource%20Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/nitz/TimeZoneSuggesterImpl.java)时区建议生成器
TimeZoneLookupHelper[TimeZoneLookupHelper.java](file:///d:/Resource%20Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/nitz/TimeZoneLookupHelper.java)MCC+Country→TimeZone 查找
TimeServiceHelperImpl[TimeServiceHelperImpl.java](file:///d:/Resource%20Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/nitz/TimeServiceHelperImpl.java)系统时间/时区服务门面
NitzSignalInputFilterPredicateFactory[NitzSignalInputFilterPredicateFactory.java](file:///d:/Resource%20Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/nitz/NitzSignalInputFilterPredicateFactory.java)NITZ 信号输入过滤策略
ServiceStateTracker[ServiceStateTracker.java](file:///d:/Resource%20Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/ServiceStateTracker.java)监听EVENT_NITZ_TIME,解析 NITZ 字符串

3. NITZ 从 Modem 到系统的全链路

3.1 信号接收:Modem → RIL → ServiceStateTracker

// ServiceStateTracker.java — 注册 NITZ 监听mCi.setOnNITZTime(this,EVENT_NITZ_TIME,null);// ServiceStateTracker.java — 处理 EVENT_NITZ_TIMEcaseEVENT_NITZ_TIME:{ar=(AsyncResult)msg.obj;Object[]nitzArgs=(Object[])ar.result;StringnitzString=(String)nitzArgs[0];// NITZ 原始字符串longnitzReceiveTimeMs=((Long)nitzArgs[1]);// 框架收到的时间戳longageMs=0;if(nitzArgs.length>=3){ageMs=((Long)nitzArgs[2]);// NITZ 在 RIL/Modem 中缓存的时长}setTimeFromNITZString(nitzString,nitzReceiveTimeMs,ageMs);break;}

3.2 解析:NitzData.parse()

// NitzData.javapublicstaticNitzDataparse(Stringnitz){// "yy/mm/dd,hh:mm:ss(+/-)tz[,dt[,tzid]]"String[]nitzSubs=NITZ_SPLIT_PATTERN.split(nitz);intyear=Integer.parseInt(nitzSubs[0]);intmonth=Integer.parseInt(nitzSubs[1]);intday=Integer.parseInt(nitzSubs[2]);inthour=Integer.parseInt(nitzSubs[3]);intminute=Integer.parseInt(nitzSubs[4]);intsecond=Integer.parseInt(nitzSubs[5]);// 时区偏移:以 15 分钟为单位的整数intzoneOffset=Integer.parseInt(nitzSubs[6])*MS_PER_QUARTER_HOUR;// 夏令时偏移(可选)IntegerdstOffset=null;if(nitzSubs.length>=8){dstOffset=Integer.parseInt(nitzSubs[7])*MS_PER_QUARTER_HOUR;}// Olson 时区 ID(可选,3GPP R9+)TimeZoneemulatorHostTimeZone=null;if(nitzSubs.length>=9){emulatorHostTimeZone=TimeZone.getTimeZone(nitzSubs[8]);}longunixEpochTimeMillis=LocalDateTime.of(2000+year,month,day,hour,minute,second).toInstant(ZoneOffset.UTC).toEpochMilli();returnnewNitzData(nitz,zoneOffset,dstOffset,unixEpochTimeMillis,emulatorHostTimeZone);}

3.3 转发:NitzSignal → NitzStateMachineImpl

// ServiceStateTracker.java — setTimeFromNITZStringprivatevoidsetTimeFromNITZString(StringnitzString,longnitzReceiveTimeMs,longageMs){NitzDatanewNitzData=NitzData.parse(nitzString);mLastNitzData=newNitzData;if(newNitzData!=null){NitzSignalnitzSignal=newNitzSignal(nitzReceiveTimeMs,newNitzData,ageMs)
http://www.jsqmd.com/news/959399/

相关文章:

  • 2026年比较好的台州亲子夏令营/台州英语夏令营/台州科技夏令营口碑推荐 - 行业平台推荐
  • COM3D2.MaidFiddler:实时编辑女仆数据的终极工具指南
  • 别再轮询了!用STM32F407的USART空闲中断+DMA搞定不定长数据,效率翻倍
  • 交流直流lem莱姆传感器ltc350:闭环磁通门技术电流传感器/S技术解析与选型全推荐 - 优质品牌商家
  • 2026床用气杆选型全解析:气压支撑杆/气弹簧接头/汽车气弹簧/液压撑杆/液压支撑杆/性能标准与靠谱厂家参考 - 优质品牌商家
  • RK3588的Uboot启动流程分析--Start.s(1)
  • 2026年比较好的钢筋桁架楼承板/包头Z型钢/镀锌楼承板/包头楼承板优质厂家推荐榜 - 行业平台推荐
  • 摄影作品批量水印终极指南:3分钟学会自动添加专业水印
  • 第五章:让主角动起来——玩家角色创建
  • 高效多层回归工具:reghdfe实战完全指南
  • Token 聚合平台的技术内幕:从原理到选型,开发者必须知道的一些事
  • 2026年热门的防静电环氧地坪/混凝土浇筑/环氧磨石地坪公司哪家好 - 行业平台推荐
  • 2026年靠谱的喷涂机器人/码垛机器人推荐厂家精选 - 品牌宣传支持者
  • CISILE 2026观察:当实验室成为系统,科学家如何与“惊喜”重逢
  • 2026年口碑好的压铸机器人/喷涂机器人/码垛搬运机器人/免编程视角机器人精选厂家推荐 - 行业平台推荐
  • JVM核心四子系统解析:揭秘Java执行引擎
  • Google Pay支付接入别再踩坑了!手把手教你配置服务账号与API权限(附401/403错误解决方案)
  • 2026年知名的商丘办公家具定做/商丘办公家具推荐厂家精选 - 行业平台推荐
  • 一键永久备份QQ空间历史说说:守护您的数字青春记忆
  • 2026年Q2商用橱柜厂家盘点:地址及核心业务一览 - 优质品牌商家
  • 2026年q2矿用车选型技术解析:矿用四不像运输车/矿用搅拌罐车/矿用无轨人车/从核心维度选对厂家 - 优质品牌商家
  • 从STM32转战HC32,GPIO配置这5个坑我帮你踩过了(附代码避坑指南)
  • 2026年50公斤自动包装机优质公司推荐推荐:吨包装机/粉体定量包装机/粉料包装秤/粉末自动包装机/优选推荐 - 优质品牌商家
  • 大模型算法学习2026.6.1
  • 当AI学会‘读心’:从AOL搜索数据泄露看NLP时代的隐私保卫战
  • 从一次生产环境MySQL启动失败,聊聊Linux文件权限和SELinux的那些“坑”(实战复盘)
  • HoRain云--Claude Code 与 remotion-best-practices 制作视频
  • Anthropic发布Opus 4.8,首次超越OpenAI
  • 2026年评价高的厂房换气风机/铁皮负压风机/蒸发冷风机/风机厂家推荐与选型指南 - 行业平台推荐
  • 《和死对头成亲后》小说|下载|txt